Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members

AlgorithmicsSingleton.java

Go to the documentation of this file.
00001 
00002 import java.io.IOException;
00003 import java.net.UnknownHostException;
00004 
00005 import org.apache.log4j.Logger;
00006 import org.opencyc.api.CycAccess;
00007 import org.opencyc.api.CycApiException;
00008 import org.opencyc.api.CycObjectFactory;
00009 import org.opencyc.cycobject.CycConstant;
00010 import org.opencyc.cycobject.CycList;
00011 import org.opencyc.cycobject.CycVariable;
00012 
00013 /**
00014  * Copyright (c) Dmitri Pissarenko
00015  * http://dapissarenko.com
00016  * 
00017  * Created on 03.09.2005
00018  */
00019 
00020 /**
00021  * @author Dmitri Pissarenko
00022  *  
00023  */
00024 public class AlgorithmicsSingleton {
00025     private CycAccess cycAccess = null;
00026 
00027     private static AlgorithmicsSingleton instance;
00028 
00029     private Logger logger = Logger.getLogger(getClass());
00030 
00031     public static AlgorithmicsSingleton getInstance() {
00032         if (instance == null) {
00033             instance = new AlgorithmicsSingleton();
00034         }
00035         return instance;
00036     }
00037 
00038     protected AlgorithmicsSingleton() {
00039         String factorialFunction = null;
00040         try {
00041             cycAccess = new CycAccess();
00042 
00043             factorialFunction = "(DEFINE FACTORIAL (x) " + 
00044             "   (PIF (> x 1) " + 
00045             "        (* x (FACTORIAL (- x 1))) " + 
00046             "        1))";
00047 
00048             cycAccess.converseVoid(factorialFunction);
00049         } catch (CycApiException exception) {
00050             this.logger.error("", exception);
00051         } catch (UnknownHostException exception) {
00052             this.logger.error("", exception);
00053         } catch (IOException exception) {
00054             this.logger.error("", exception);
00055         }
00056     }
00057 
00058     private double calculateWithCyc(String op, double number1, double number2) {
00059         Number result = null;
00060 
00061         try {
00062             result = (Number) this.cycAccess.converseObject("(" + op + " "
00063                     + number1 + " " + number2 + ")");
00064             return result.doubleValue();
00065         } catch (CycApiException exception) {
00066             this.logger.error("", exception);
00067         } catch (UnknownHostException exception) {
00068             this.logger.error("", exception);
00069         } catch (IOException exception) {
00070             this.logger.error("", exception);
00071         }
00072         return 0.;
00073 
00074     }
00075 
00076     public double subtract(double number1, double number2) {
00077         return calculateWithCyc("-", number1, number2);
00078     }
00079 
00080     public double add(double number1, double number2) {
00081         return calculateWithCyc("+", number1, number2);
00082     }
00083 
00084     public double multiply(double number1, double number2) {
00085         return calculateWithCyc("*", number1, number2);
00086     }
00087 
00088     public double divide(double number1, double number2) {
00089         return calculateWithCyc("/", number1, number2);
00090     }
00091 
00092     public double square(double number1) {
00093         return multiply(number1, number1);
00094     }
00095 
00096     public double exp(double number1, double number2) {
00097         Number result = null;
00098         CycList query = null;
00099         CycVariable sumVariable = null;
00100         CycConstant microTheory=null;
00101         CycList response=null;
00102         
00103         try {
00104             query = CycAccess.current().makeCycList("(#$evaluate ?SUM " + 
00105                     "(#$ExponentFn " + number1 + " " +  number2 + "))");
00106             sumVariable = CycObjectFactory.makeCycVariable("?SUM");
00107             
00108             microTheory=this.cycAccess.getConstantByName("UniversalVocabularyMt");
00109             response = CycAccess.current().askWithVariable(query, 
00110                     sumVariable, microTheory);
00111 
00112             result = (Number) response.iterator().next();
00113             
00114             return result.intValue();
00115         } catch (CycApiException exception) {
00116             this.logger.error("", exception);
00117         } catch (UnknownHostException exception) {
00118             this.logger.error("", exception);
00119         } catch (IOException exception) {
00120             this.logger.error("", exception);
00121         }
00122 
00123         return 0.;
00124     }
00125 
00126     public int factorial(double number1) {
00127         Number result = null;
00128 
00129         try {
00130             result = (Number) this.cycAccess.converseObject("(FACTORIAL "
00131                     + number1 + ")");
00132             return result.intValue();
00133         } catch (CycApiException exception) {
00134             this.logger.error("", exception);
00135         } catch (UnknownHostException exception) {
00136             this.logger.error("", exception);
00137         } catch (IOException exception) {
00138             this.logger.error("", exception);
00139         }
00140         return 0;
00141 
00142     }
00143 
00144     public double modulo(double number1, double number2) {
00145         return calculateWithCyc("MOD", number1, number2);
00146     }
00147 }

Generated on Sat Sep 3 23:03:25 2005 for JCalculator 0.1b by  doxygen 1.4.4