前提('直到第 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”使用接口
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 AND not(f(y))"
(6.4) 一个“翻译”(通过反射)F1 的 Java 程序 (J1.jar) .txt 和 F2.txt 在第二个 java 程序 (J2.jar) 中,文件 F3.txt 用于附加新事实并删除一些旧事实。
(7) 项目比率:添加事实(文件 F3.txt)和规则(F1.txt 中的域或 F2.txt 中的谓词-函数)更简单(我想是),而不是在需要时修改 java 代码。和 Java 一样有很多库、ide、gui 工具等。
(8) 类似的主题和问题(显然不足以满足我的需求):
问题(双重):
是否有这样一个主题或使用 OO 语言以混合方式进行另一种范式的编程方式的名称(它与本体有关http://protegewiki.stanford.edu/wiki/Main_Page,http://www. w3.org/TR/owl-features/,描述逻辑和声明式编程)?
您是否认为这是错误的方法(如果您需要声明性-功能性-逻辑编程使用另一种语言:它们是否不如 Java 的 GUI 好,它们不是平台独立的、健壮的等)?
非常感谢