问题标签 [jpl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - SWI Prolog Java jpl.PrologException 查询不起作用
我有两个 Prolog 文件。条款和规则如下:
子句.pl
规则.pl
当我通过以下方式创建查询以找出 John 在 Java 中的位置时:
我收到以下错误:
但是,如果我删除该 while 循环并简单地打印出查询,我会从 Prolog 得到以下响应:
所以我知道至少查询是从 Java 到 Prolog 的。关于可能导致错误的任何想法?
注意:原来我的文件路径不正确。更改代码以创建查询,如下所示:
产生以下输出:
这比编译器错误要好,但答案应该是:
java - 如何获得 jpl 最新版本:jpl7?
我正在使用带有 jpl 库的 java 项目,但我收到编译错误“包 org.jpl7 不存在”。我已经尝试下载最新版本,但我可能已经获得了 jpl3 版本。
如何获取最新版本的jpl7?我进行了广泛的搜索,甚至找到了http://jpl7.org,但没有关于如何下载该版本的提示。
谢谢
java - 带有 JPL 的 Java 中的 Prolog 列表
我是一个 prolog-noob,并且在 java 中的 prolog-list 有问题。
序言:
prologconsole 中的解决方案:[einkaufen,sport,hotel,schwimmen,sauna]
爪哇:
Java 输出: X = '[|]'(einkaufen, '[|]'(sport, '[|]'(hotel, '[|]'(schwimmen, '[|]'(sauna, '[]' )))))
我如何将 prolog-term 读取为 Java 的 ArrayList?
java - JPL7,序言查询中的字符串列表
我有一个序言查询,它需要一个数组作为原子:
searchEventsOnCategory(Categories,Events) 类别是字符串列表。
示例输入:searchEventsOnCategory(['Bar','Disco'],Events)
输出:事件 = [listOfEvents]
我的java代码是:
我必须如何定义 V,该序言将 V 作为字符串列表?
java - 如何在 Linux 上使用 JPL(双向 Java/Prolog 接口)?
我对在 Java 中嵌入 Prolog 解释器很感兴趣。一种选择是使用 JPL,但 JPL 站点上的下载链接已损坏,并且安装页面提到了我找不到的 jpl.zip。我下载了似乎包含 JPL 的 SWI-Prolog(它在安装时将其列为组件),但我仍然不确定如何将它与 Java 一起使用。
关于如何在 Linux 上使用 JPL 的任何想法?我可以使用另一个库来实现相同的目标吗?
谢谢
java - 使用 JPL 制作和加载 SWI-Prolog 实例的副本
我想要做的是创建一个 Prolog 实例的副本并使用 JPL(Java-Prolog 接口)加载该副本。我可以想到几种可能的方法来做到这一点,但没有一个是完全解决的,这就是我来这里的原因。
首先,我知道我可以使用qsave_program/2
. 这将创建一个我可以运行的 exe 文件。但是,我需要使用 JPL 从 Java 中查询这个保存的实例。我已经尝试为此寻找文档,但找不到任何文档(可能不是常见问题)。有什么方法可以运行使用保存的实例qsave_program/2
并从 JPL 查询它?
第二个想法是查询所有动态断言子句的原始实例。但是,我不知道断言了什么,所以我不能直接要求这些东西,而是我必须根据它们是动态的事实来收集这些子句。然后我可以简单地从 JPL 启动另一个实例并断言这些事实来创建一个副本。这可能吗?这会有效地创建状态的副本吗?
java - 通过 JPL 查询 Prolog 模块
我正在尝试使用 JPL 查询 prolog 文件的动态模块。感谢这个问题( 如何在 jpl 中将文件作为模块查阅),我能够使用声明为这样的 Query 对象来查阅、断言和从模块中撤回:
assertFact = new Query("assert(mod1:"+fact.toString()+")");
retractFact = new Query("retract(mod1:"+fact.toString()+")");
consultQuery = new Query("mod1:consult('"+rulesPath+"')");
但是,我无法使用类似的调用来查询文件中的谓词,例如
legalMovesQuery = new Query("mod1:legal("+playerName+",Move)");
或者
nextQuery = new Query("mod1:next(Role,Action)");
它总是从我同时运行的 prolog 的非模块实例返回结果。我觉得这特别奇怪,因为我能够成功运行这个查询:
dynamicQuery = new Query("mod1:predicate_property(X,dynamic),\\+predicate_property(X,built_in),\\+predicate_property(X,number_of_clauses(0))");
也许是因为所有不工作的查询都在文件中,所以语法的工作方式不同?我不知道,我只是在吐槽。
那么,关于如何查询我创建的模块的任何想法?
java - 需要帮助来理解 Java 字节码指令
我正在尝试在 Prolog 中对字节码进行静态分析。我正在使用 bcel 库从 MethodGen 获取指令列表。对于 aload_0,我得到
0:aload_0[42](1)
我知道aload_0
是为了加载第 0 个局部变量。但我很难理解接下来的内容,即[42](1)
. 它也有其他说明,例如:
有人可以解释一下那些是什么吗?将不胜感激!
java - SWI-Prolog:无法打开资源数据库“../../src/swipl.prc”
我已经检查了 SWI-Prolog JPL 库,并且正在尝试添加一些功能。现在,我只是想让测试在 TestJUnit 测试中工作。但是,我收到以下错误:
我查看了代码,我知道路径来自此声明:
它正在寻找一个环境变量%SWIPL_BOOT_FILE%
,所以我可以看到这可能如何解决问题。但是,我不知道应该添加哪个文件作为引导文件。
我已经尝试过swipl-win.exe
,但这不起作用。
有任何想法吗?
java - jpl 库不适用于 java maven 项目
我在项目中使用 jpl 库时遇到问题。
奇怪的是,在一个旧项目上,这是一个普通的 Java 应用程序,通过遵循这个解决方案JPL/SWI Prolog configuration failure与 jpl 库一起工作得很好。解决方案提到我必须配置我的环境变量才能使库与 Java 对话。
另一方面,我的新项目是一个 Maven 项目。首先,我包含了 Maven 的以下依赖项。
但我得到了以下异常:
线程“AWT-EventQueue-0”中的异常 java.lang.UnsatisfiedLinkError: org.jpl7.fli.Prolog.current_query()Lorg/jpl7/fli/qid_t; 在 org.jpl7.fli.Prolog.current_query(Native Method) 在 org.jpl7.Query.close(Query.java:540) 在 org.jpl7.Util.textToTerm(Util.java:130) 在 org.jpl7.Query .(Query.java:185) at com.michalistourism.core.PrologHandler.RunGorgias(PrologHandler.java:47) at com.persistence.TourismSession.RunPrologFile(TourismSession.java:281) at com.michalistourism.tourismassistant.ChatBoxPanel.btnDoNowActionPerformed (ChatBoxPanel.java:109) 在 com.michalistourism.tourismassistant.ChatBoxPanel.access$100(ChatBoxPanel.java:22) 在 com.michalistourism.tourismassistant.ChatBoxPanel$2.actionPerformed(ChatBoxPanel.java:74) 在 javax.swing.AbstractButton。 fireActionPerformed(AbstractButton.java:
这是我的代码片段,其中引发了上述异常。
然后我尝试添加一个指向 jpl jar 的 maven 依赖项,我在以前的 Java 项目中使用过它,其中 jar 文件位于项目 lib 文件夹中。
在这种情况下,新的例外情况如下:
线程“AWT-EventQueue-0”中的异常 java.lang.NoClassDefFoundError: org/jpl7/JPL at com.michalistourism.core.PrologHandler.RunGorgias(PrologHandler.java:37) at com.persistence.TourismSession.RunPrologFile(TourismSession.java :281) 在 com.michalistourism.tourismassistant.ChatBoxPanel.btnDoNowActionPerformed(ChatBoxPanel.java:109) 在 com.michalistourism.tourismassistant.ChatBoxPanel.access$100(ChatBoxPanel.java:22) 在 com.michalistourism.tourismassistant.ChatBoxPanel$2.actionPerformed( ChatBoxPanel.java:74) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java :402) 在 javax.swing.DefaultButtonModel。setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 java.awt.Component.processMouseEvent(Component.java:6533) 在 javax.swing.JComponent.processMouseEvent (JComponent.java:3324) 在 java.awt.Component.processEvent(Component.java:6298) 在 java.awt.Container.processEvent(Container.java:2236) 在 java.awt.Component.dispatchEventImpl(Component.java: 4889) 在 java.awt.Container.dispatchEventImpl(Container.java:2294) 在 java.awt.Component.dispatchEvent(Component.java:4711) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 在 java. java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 在 java.awt.Container 的 awt.LightweightDispatcher.processMouseEvent(Container.java:4525)。dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java :758) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) ) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) 在 java. java.awt.EventQueue$4.run(EventQueue.java:729) 在 java.security.AccessController 的 awt.EventQueue$4.run(EventQueue.java:731)。doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java: 201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java. awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 原因:java.lang.ClassNotFoundException: org.jpl7.JPL at java.net.URLClassLoader.findClass( URLClassLoader.java:381) 在 java.lang.ClassLoader。loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 41 更多
有什么我可以做的吗?