以预测逻辑方式使用java

时间:2013-08-30 13:25:40

标签: java oop user-interface reflection logic-programming

前提('直到第7点让我们假装他们都是真的,合理的或相关的,请)

(1)Java是免费的,有Swing和Javafx等。

(2)关于Java,有很多文档,教程等。

(3)我想将它用于有点本体论 - 一阶逻辑推理

(4)我知道protegé但这还不够

(5)请举个例子:

  1. 谓词逻辑语言。

    • 让我们假装我们正在谈论水果
  2. 声明性语言中的伪代码

    公理或类似:域和功能

    includedAsSubset(Orange, Fruit);
    
    includedAsSubset(Apple, Fruit);
    
    includedAsSubset(Color, Thing);
    
    includedAsSubset(Fruit, Thing);
    
    isRed: Fruit -> Boolean;
    
    isYellow: Fruit -> Boolean;
    
    hasColor: Fruit -> Color;
    
        **Facts**                         
    
    isIn(thisOrange, Orange);
    
    not(isRed(thisOrange));
    
    isIn(thisApple, Apple);
    
    1. Java代码翻译
    2. 我使用“A extends B,C”

      的接口
      public interface Fruit {
          Boolean isRed();
          Boolean isYellow();
          Color hasColor();
      }
      
      public interface Orange extends Fruit {};
      
      public interface Apple extends Fruit {};
      
      public class ConcreteApple implements Apple {
      
          Color thisAppleColor;
          static ArrayList<Color> concreteApplesColours = new ArrayList<Color>();
      
          ConcreteApple(Color color) {
              Color red = new Color();
              concreteApplesColours.add(red);
              Color yellow = new Color();
              concreteApplesColours.add(yellow);
      
              setThisAppleColor(color); // try catch should be added to check for the color...
          }
      
          @Override
          Boolean isRed() {
              return new Boolean(this.getThisAppleColor().equals(red));
          }
          @Override
          Boolean isYellow() {
              return new Boolean(this.getThisAppleColor().equals(yellow));
          }
          @Override
          Color hasColor() {
              return this.getThisAppleColor();
          }
      }
      
      public class Reasoner {
          static void main() {
              Color orange = new Color();
              Color Yellow = new Color();
              Orange thisOrange = new ConcreteOrange(orange);
              Apple thisApple = new ConcreteApple(yellow);
              if(thisApple.isRed() && thisOrange.isRed()) {
                  doSomething();
              } else if (thisApple.isRed()) {
                  doSomethingElse();
              }
          }
      }
      

      (6)项目草图如下:
      (6.1)DB或文件(可能是xml文件或txt。例如F1.txt),其中收集了“A是类”,“B是A的子类”等句子等(表示为“includeIn( B,A)“等);
      (6.2)用于功能 - 谓词签名的另一个文件(F2.txt):“f:Y - &gt;布尔”,“g:X - &gt; Y”等。
      (6.3)关于事实的另一个文件(F3.txt):“x isIn X”,“y isIn Y”,“f(g(x))== true AND not(f(y))”
      (6.4)一个Java程序(J1.jar),它在第二个java程序(J2.jar)中“翻译”(通过Reflection)F1.txt和F2.txt,文件F3.txt用于附加新事实并删除一些旧的。

      (7)项目比率:更简单(我想是)添加事实(文件F3.txt)和规则(F1.txt中的域或F2.txt中的谓词 - 函数)而不是在需要时修改java代码。而Java作为很多库,ide,gui工具等。

      (8)类似的主题和问题(显然不足以满足我的需要):

      问题(双重):

      是否有任何关于使用OO语言以混合方式编写另一种范式的主题或编程方式的名称(它与本体http://protegewiki.stanford.edu/wiki/Main_Pagehttp://www.w3.org/TR/owl-features/,描述逻辑和声明性编程有关)?

      你认为它是错误的方法(如果你需要声明 - 功能逻辑编程使用另一种语言:如果它们不如GUI的Java那么好,它们不是平台独立,强大等等。 )?

      非常感谢

1 个答案:

答案 0 :(得分:0)

实际上,您正在构建事实的内存数据库,并希望对其进行查询。与任何其他数据库一样,您将面临以下几个问题:在更改主要事实(或添加或删除事实)时准确修改索引,规划查询评估,与后端存储同步。这些技术方面不应与程序中的业务逻辑混合,因此它们应集中在框架(库)中。要么开发自己的框架,要么采用现有的框架。

我建议使用一些开源SPARQL java实现,然后,如果您仍然喜欢java程序而不是文本事实/查询表示,那么破解该实现并直接使用内部,绕过文本表示。