问题标签 [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 - 多线程程序中 JPL 库的意外行为(接口 Java 和 Prolog)
我一直在试验 JPL 的多线程特性。据我从源代码中的注释了解,每个 Java 线程分配了一个不同的 Prolog 引擎。显然,在线程 A 中启动查询时出现问题,在线程 B(由线程 A 生成)中执行另一个查询,在线程 A 中再次执行第三个查询。
下面的代码片段说明了这个问题:
由于 JPL 文档提到不能同时激活两个查询,因此代码会等到线程完成后再继续执行最后一个查询(我尚不清楚该约束是否仅适用于同一线程中的查询或者如果它适用于不同线程和引擎中的查询)。
在前面的示例中,只有前两个查询成功。执行第三个查询时,我收到此致命错误:
这是 JPL 中的错误吗?在那种情况下,有人知道将 JPL 与多线程一起使用的解决方法吗?
我已经用 YAP 版本 6.2.2 和 6.3.2 进行了测试,结果相同。
更新:
正如@sharky 所建议的那样,显然这是 YAP 二进制文件(或 YAP 的 JPL 端口)的问题。使用 SWI 时,问题中显示的示例运行良好。
我仍然对多线程程序中的 JPL 行为感到困惑。查看JPL 库open
中类中方法的源代码和注释:Query
似乎 JPL 将为每个线程创建一个新的逻辑引擎。但是,如果我执行这个简单的程序:
我可以看到以下输出:
因此,显然第二个线程正在访问与第一个线程相同的 Prolog 引擎,而不是源代码及其评论所暗示的新引擎。
如果有人对 JPL 和多线程有经验,请澄清这一点。
java - java和swi prolog之间的连接
我正在尝试从 java 运行 swi prolog
我正在使用 eclipse 并且我已将 jpl.jar 插入到项目中(属性->库->添加外部 jar)并且当我尝试运行程序时(它是 jpl 的示例所以它应该可以工作..)我收到一个错误:
我错过了什么?
java - jpl.dll:找不到依赖库
我正在使用 java netbeans 并想在其中使用 prolog api,但我不断收到错误
谁能帮帮我?
java - JPL 找不到 jpl.dll 的依赖库
在我的电脑上安装 SWI-Prolog 后,我继续尝试其中的一个示例,并发现了它的特别之处:
我检查过,上述文件夹中有一个jpl.dll 文件,所以我不确定这里发生了什么。我已经检查了这个网站和互联网上的旧问题,但都没有提供任何确凿的答案。
有人知道该怎么做吗?
编辑:
这是我尝试运行的代码,以防万一。
java - 从java断言事实到prolog
我将 SWI-Prolog 与 JPL 库一起使用。我有一个用 Java 编写的程序,它产生如下字符串:
然后,在文件头中有一个需要这个事实的 prolog 文件。我既不想在文件头插入代码,也不想使用文本文件,只需要 java.util. 有解决方案吗?
prolog - 查询在咨询中工作,但不在 JPL 和命令行中
我正在使用 JPL 并向 Swi-Prolog 发起一些查询。该程序适用于所有查询,但只有一个。
此查询不起作用:
线程“主”jpl.PrologException 中的异常:PrologException:错误(uninstantiation_error(元素(_3,'.'(2,'.'(3,'.'(4,[]))),_4)),上下文( :(system, /(assert, 2)), '2-nd argument'))
如果我将查询放在 .pl 文件中(显然没有断言)并使用咨询运行它,工作正常!但如果我在控制台模式下输入查询,返回与 JPL 相同的错误。那么,问题出在哪里?
java - 如何在 jpl 中将文件作为模块查阅
我正在尝试将 Prolog 文件作为模块进行咨询,因为 jpl 不支持多个 prolog vm。
在 swipl 控制台中,我可以成功地做这样的事情
在java中(嗯,它实际上是scala,但它们都在jvm之上),我可以直接查阅文件而没有问题
但是,当我尝试将文件作为模块进行查阅时,我总是会遇到异常。
任何人都可以指出我在 jpl 中将 prolog 文件作为模块咨询的正确方法吗?谢谢!
prolog - 将相同的 prolog 文件加载到 jpl 中的不同模块中
我正在尝试使用 jpl 将相同的 swipl 文件加载到不同的模块中。我必须这样做的原因是因为我想要一个可以断言新谓词的模块,同时保持另一个不变。问题是 swipl 似乎禁止这样做,
我试图为 load_files 设置 redefine_module(true),但还是不行
我已经被这个阻止了几个小时,但在网上找不到解决方案。有人可以帮忙吗??
java - 如何在 android 中使用 swi-prolog
我用 swi-prolog 开发了一个 prolog 程序,并使用带有 JPL.jar 的常规 java 为它附加了一个接口,它运行得很好。
现在我想对 android 移动界面而不是 java 桌面界面做同样的事情。所以我创建了一个 android 应用程序,将 JPL 添加为外部 jar 并像之前一样调用 prolog 文件。代码中没有显示错误。
但是当我将它作为 android 应用程序运行时,它说 jpl.query$1 找不到。
这是日志猫
那么错误可能是什么。
我发现有人说 JPL(swi prolog) 不能在 android 中使用,这是真的。
我该怎么做才能让我的 prolog 应用程序在 android 上运行
谢谢玛西
java - 无法在 Java 中重定向标准输出
我正在尝试将 Java 库的控制台输出重定向到我的应用程序中的 JTextArea。有问题的库是 JPL,它是 Java 和 SWI-Prolog 之间的桥梁(尽管我怀疑这在概念上是否有很大的相关性)。
这是我的代码:
当我运行此代码时,字符串“此文本已成功重定向”按预期重定向到我的 PrintStream。但是,上述代码段的最后一行会生成一些文本输出,这些文本输出仍会打印在 Java 控制台而不是我的 PrintStream 中。
该方法allSolutions(String)
可以做什么以使其输出不被重定向?难道是它调用了一个生成输出的操作系统进程(它确实调用了 swipl 进程)?如果是这样,我可以在不修改 JPL 代码的情况下重定向其输出吗?