Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以谓词逻辑方式使用java_Java_Oop_User Interface_Reflection_Logic Programming - Fatal编程技术网

以谓词逻辑方式使用java

以谓词逻辑方式使用java,java,oop,user-interface,reflection,logic-programming,Java,Oop,User Interface,Reflection,Logic Programming,前提(在第7点之前,让我们假装它们都是真实的、合理的或相关的) (1) Java是免费的,有Swing和Javafx等 (2) 关于Java,有很多文档、教程等 (3) 我想用它来做一种本体论——一阶逻辑推理 (4) 我知道protegé,但这还不够 (5) 请允许我举一个例子: 谓词逻辑语言 让我们假装我们在谈论水果 声明式语言中的伪代码 公理或类似:域和函数 includedAsSubset(Orange, Fruit); includedAsSubset(Apple, Fruit);

前提(在第7点之前,让我们假装它们都是真实的、合理的或相关的)

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

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

(3) 我想用它来做一种本体论——一阶逻辑推理

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

(5) 请允许我举一个例子:

  • 谓词逻辑语言

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

    公理或类似:域和函数

    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);
    
  • Java代码中的翻译
  • 我会使用“A扩展B,C”的接口

    公共接口{
    布尔isRed();
    布尔值为黄色();
    颜色hasColor();
    }
    公共接口{};
    公共接口苹果扩展水果{};
    Apple实现Apple的公共类{
    把这个颜色涂成苹果色;
    静态ArrayList concreteApplesColours=新ArrayList();
    苹果(彩色){
    红色=新颜色();
    混凝土应用颜色。添加(红色);
    黄色=新颜色();
    混凝土应用颜色。添加(黄色);
    setThisAppleColor(color);//应添加try catch以检查颜色。。。
    }
    @凌驾
    布尔isRed(){
    返回新的布尔值(this.getThisAppleColor().equals(红色));
    }
    @凌驾
    布尔值为黄色(){
    返回新的布尔值(this.getThisAppleColor().equals(黄色));
    }
    @凌驾
    颜色hasColor(){
    返回此值。getThisAppleColor();
    }
    }
    公共类推理机{
    静态void main(){
    橙色=新颜色();
    黄色=新颜色();
    橙色thisOrange=新的混凝土橙色(橙色);
    苹果这个苹果=新苹果(黄色);
    if(thisApple.isRed()&&thisOrange.isRed()){
    doSomething();
    }else if(thisApple.isRed()){
    doSomethingElse();
    }
    }
    }
    
    (6) 项目草图如下:
    (6.1)数据库或文件(可能是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))==真而非(f(y))”
    (6.4)一个Java程序(J1.jar),它在第二个Java程序(J2.jar)中“翻译”(通过反射)F1.txt和F2.txt,通过文件F3.txt附加新事实并删除一些旧事实。

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

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

    问题(两个方面):

    这样一个主题或使用OO语言以混合方式为另一个范例编程的方式有什么名称吗(它与本体、描述逻辑和声明式编程有关)

    您是否认为这是一种错误的方法(如果您需要声明式-函数式-逻辑编程,请使用另一种语言:无论它们在GUI方面是否不如Java好,它们都不是平台独立的、健壮的等等)


    非常感谢

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


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

    为什么不使用Coq或Isabelle?这似乎是一个方钉/圆孔问题,所以即使可以在Java中实现,也可能不是很有用。我当然不想使用任何需要您生成示例中所有代码的东西。-coq isabelle建议:刚刚看到:不错,但主要问题仍然存在。对于用户来说,简单地说一个表示事实的一阶逻辑是否为真;但是用户不能/不应该自己在java类中创建新方法。这是主要思想:“a(b,c)是真的”是用用户的语言表达的;“b.a(this,c)”或“b.a(c)”是程序员的语言;就这些有用与否:我不知道使用简单gui构建器和健壮语言的其他方法:这是问题的主要部分。很多人感谢我,我不喜欢Java;我不知道还有什么对表示逻辑和本体概念以及构建gui有用的东西。
    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();
            }
        }
    }