【发布时间】:2021-02-15 22:45:00
【问题描述】:
当我使用 JPL(来自 JavaSE 1.8)时,Prolog(SWI-Prolog 版本 8.2.2)可以返回错误消息而不会引发异常。例如。使用咨询时文件有错误:
import org.jpl7.Query;
public class Test {
public static void main(String[] args) {
try {
String t1 = "consult('test.pl')";
Query q1 = new Query(t1);
q1.hasNext();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我在控制台得到输出:
ERROR: test.pl:1:23: Syntax error: Unexpected end of file
但是没有抛出异常。因此,我的 Java 程序无法知道所查阅的文件有错误。我在这个简单示例中使用的文件 test.pl 仅包含一个带有语法错误的简单谓词:
brother(mike, stella)..
我该怎么做才能让我的 Java 程序捕捉到这个错误?具有类似标题的post 似乎无法解决此问题...
也许我可以使用 JPL 或其他来源的语法检查方法,有什么具体的想法吗?
【问题讨论】:
-
初始化是否真的正确。根据this page,你实际上必须把这个词拼出来(显然很费力,所以很可能已经改变了):
Query q1 = new Query( "consult", new Term[] {new Atom("test.pl")} ); -
是的,它有效。但问题是
consult/1本身 对坏文件感到满意。它成功了!很有趣。 -
但是不知道怎么解决。如果文件包含错误(最好在事务上不断言该文件中的任何规则?),如何使 Prolog 失败?
-
我设法通过在执行 java 代码时将输出重定向到文件然后打开文件并搜索文件名的最后一个实例(例如 test.pl)来解决它。但是,这可能会出现问题,因为 a) 输出文件可能会变得非常大,从而降低性能 b) 我想从 spring boot RESTful 服务中执行此操作...
-
也许有一个 Prolog linter 可以首先应用于要加载的文件。如果咳嗽,请将文件放在一边。另一方面,听起来您正在尝试实现面向 Prolog 引擎的基于 REST 的协议?你有没有看过Pengines,它提供了一个 HTTP 协议(有状态,因为纯无状态不这样做)。
标签: java swi-prolog jpl