2013-08-30 43 views
-1

房地用java('至7点,让我们假装他们都是真实的或合理的或相关的,请)在表语逻辑方式

(1)Java是免费的,有秋千和JavaFX等

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

(3)我想用它来还挺本体 - 一阶逻辑推理

(4)我知道门生但这还不够

(5)让我请使用一个例子:

  1. 谓词逻辑语言。域和功能

    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); 
    
    • 让我们假设,我们在声明语言

      公理或类似谈论水果

伪代码=“2”>

  • 翻译在Java代码
  • 我会使用接口为 “A延伸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 - > Boolean”,“g:X - > Y”等。
    (6.3)有关事实的另一个文件(F3.txt ):“x isIn X”,“y isIn Y”,“f(g(x))== true并且不是(f(y))”翻译的Java程序(J1.jar) “(通过反射)F1.txt和F2.txt在第二个Java程序(J2.jar)中使用文件F3.txt来附加新的事实并删除一些旧的事实。

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

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

    问题(两倍):

    是否有任何这样的话题或使用面向对象语言编程的另一个范例的名称混合的方式(它与本体http://protegewiki.stanford.edu/wiki/Main_Page,http://www.w3.org/TR/owl-features/,描述逻辑和声明性编程有关)?你是否认为它是错误的方法(如果你需要声明性的 - 功能性逻辑编程使用另一种语言:无论它们不像Java的GUI那么好,它们不是平台独立的,强大的等等。 。)?

    非常感谢

    +0

    为什么不使用Coq或Isabelle?这看起来像是一个正方形/圆孔问题,所以即使可以在Java中执行,它可能不是很有用。我当然不希望使用任何需要你来生成示例中的所有代码的东西。 – Antimony

    +0

    - coq-isabelle暗示:刚才看到:很好,但主要问题仍然存在。对于用户来说很容易说一个特定的一阶逻辑是否代表事实是真的;但是用户不能/不应该在java类中自己创建一个新的方法。这是主要思想:“a(b,c)是真实的”是用户的语言; “b.a(this,c)”或“b.a(c)”是程序员的语言;就这样。 - 是否有用:我不知道有另一种方法让简单的gui的构建者和强大的语言:这是问题的主要部分。非常感谢 – user2731139

    回答

    0

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

    我推荐使用一些开源的SPARQL java实现,然后,如果你仍然喜欢Java程序而不是文本的事实/查询表示,那么直接绕过这个实现并直接使用内部,绕过文本表示。

    +0

    严格地说,我不喜欢Java;我不知道其他任何可以用来代表逻辑和本体论概念以及构建gui的东西。 – user2731139