- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想查询通过 JPL 在 Java 中使用 Prolog,我阅读了文档 (http://www.swi-prolog.org/packages/jpl/java_api/getting_started.html)序言谓词是这些:
child_of(joe, ralf).
child_of(mary, joe).
child_of(steve, joe).
child_of(steve, ralf).
descendent_of(X, Y) :-
child_of(X, Y).
descendent_of(X, Y) :-
child_of(Z, Y),
descendent_of(X, Z).
我的代码是这样的
Variable X = new Variable();
Query q4 =
new Query(
"descendent_of",
new Term[] {X,new Atom("joe")}
);
java.util.Hashtable solution;
while ( q4.hasMoreSolutions() ){
solution = q4.nextSolution();
System.out.println( "X = " + solution.get(X));
}
根据我的 prolog 谓词,我的 java 代码应该检索“mary”和“steve”,但我明白了:
X = null
X = null
我做错了什么?提前致谢
编辑:这是我的全部测试
Query q1 =
new Query(
"consult",
new Term[] {new Atom("C:\\Users\\cardozo\\Documents\\fer\\info2\\lore\\test.pl")}
);
return q1;
System.out.println( "consult " + (q.query() ? "succeeded" : "failed"));
Query q2 =
new Query(
"child_of",
new Term[] {new Atom("joe"),new Atom("X")}
);
Boolean resp= q2.query();
System.out.println("child_of(joe,X) is " + resp.toString()
);
Query q3 =
new Query(
"descendent_of",
new Term[] {new Atom("steve"),new Atom("ralf")}
);
System.out.println(
"descendent_of(joe,ralf) is " +
( q3.query() ? "provable" : "not provable" )
);
Variable X = new Variable();
Query q4 =
new Query(
"descendent_of",
new Term[] {X,new Atom("joe")}
);
java.util.Hashtable solution;
q4.query();
while ( q4.hasMoreSolutions() ){
solution = q4.nextSolution();
System.out.println( "X = " + solution.get("X"));
}
这就是我在 java 控制台中得到的结果
run:
% C:\Users\cardozo\Documents\fer\info2\lore\test.pl compiled 0.00 sec, 8 clauses
consult succeeded
child_of(joe,X) is false
descendent_of(joe,ralf) is provable
X = null
X = null
BUILD SUCCESSFUL (total time: 0 seconds)
最佳答案
我找到了解决方案,我必须像这样使用 Compound 类(包含在 jpl 中)
Query q4 = new Query(new Compound("descendent_of", new Term[] { new Variable("X"), new Atom("joe")}));
while ( q4.hasMoreSolutions() ){
solution = q4.nextSolution();
System.out.println( "X = " + solution.get("X"));
}
我得到了解决方案
X = mary
X = steve
关于java - 使用 JPL 查询 Prolog 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494747/
我在安装 jpl 库时遇到问题。我安装了最新的 swipl 版本(但我之前也尝试过不稳定的版本): SWI-Prolog 7.2.3 for Windows 7/8/10 64-bit edition
我正在使用 JPL 在 Java 程序中执行一些 SWI-Prolog 查询。当我想创建一个新查询时,我希望能够使用 jpl.Util.textToTerm 直接从用户输入中实例化 Terms,而无需
我对将 JPL 与 java 一起使用很感兴趣,但是在尝试编译 java 程序时出现错误消息提示“package jpl does not exist”。我如何将 jpl 导入 java? 最佳答案
我正在尝试将 Prolog 文件作为模块进行查询,因为 jpl 不支持多个 prolog vm。 在 swipl 控制台中,我可以成功地执行类似的操作 ?- consult(mod1:'data/lo
我正在尝试了解如何使用 JPL。为此,我将其中一个测试从文档部分 ( swipl\doc\packages\examples\jpl\java\Time ) 复制到 eclipse 并尝试运行它。 如
我想在 Prolog 中为人工智能建立一个知识库。首先,我想尝试通过做一个大象、巨型 Ant 等玩具示例来学习 Prolog 及其用途。 我正在使用:NetBeans 8.0.1、SWI-Prolog
我正在尝试使用 SWI-Prolog JPL 库,但我遇到了问题。 我试图让我的 Eclipse 项目访问 JPL,但是当我尝试启动该程序时,出现以下错误: Exception in thread "
我现在正在配置 JPL,想使用 java 来处理 swi-prolog。 我下载了最新稳定版的SWI-Prolog,6.2.0,安装在D:\swipl 首先,我在 PATH virable 中添加了以
我在项目中使用 jpl 库时遇到问题。 奇怪的是,在一个旧项目中,这是一个普通的 Java 应用程序,通过遵循此解决方案 JPL/SWI Prolog configuration failure 可以
我是一个 prolog-noob,并且对 java 中的 prolog-list 有疑问。 序言: event( 'Number1', 54.320021, 13.043840, [sp
我想查询通过 JPL 在 Java 中使用 Prolog,我阅读了文档 (http://www.swi-prolog.org/packages/jpl/java_api/getting_started
轻微的编辑:我在下面说JPL的Horizons库不是开源的。实际上,它可以在这里找到:http://naif.jpl.nasa.gov/naif/tutorials.html 在2013-01-0
我的一个项目需要 swipl 控制台输出(跟踪输出)。我正在尝试使用 JPL7 API 来执行此操作,但我似乎找不到从 swipl 控制台获取输出的方法。有什么办法可以做到这一点?或者是否有我可以运行
我在使用 JPL 时检索错误和警告消息时遇到一些问题。例如,尝试直接从 SWI-Prolog 查询不存在的文件会产生以下输出: 1 ?- consult('NonExistingFile'). ERR
我有两个 Prolog 文件。条款及细则如下: 子句.pl get(mary,milk). go(sandra,kitchen,1). get(john,football). go(john,hall
我想要做的是创建 Prolog 实例的副本并使用 JPL(Java-Prolog 接口(interface))加载该副本。我可以想到几种可能的方法来做到这一点,但没有一个能够完全解决,这就是我来这里的
在一个使用 JPL 与 Prolog 交互的 Java 应用程序中,我希望能够使用不同的设置重新启动 Prolog 引擎。例如,我想从 SWI 更改为 YAP(我使用方法 JPL.setNativeL
我一直在尝试 JPL 的多线程功能。据我从源代码中的注释中了解到,每个 Java 线程都分配了一个不同的 Prolog 引擎。显然,当在线程 A 中启动一个查询,在线程 B(由线程 A 生成)中执行另
我正在尝试使用 JPL 将我的对象持久保存到一个简单的 BDB 中。问题是,如果我尝试在主索引中存储子类,则会收到错误(如下)。 子类在数据方面没有任何不同,但它们在功能上不同,我希望子类成为编码的实
我想用java创建一个对象: MyObject obj = new MyObject (); 我想用 jpl 查询将它传递给 prolog。 如何完成java到prolog的对象传递? 我知道我可以在
我是一名优秀的程序员,十分优秀!