java - SWI-Prolog 接口(interface)中的 CLPFD 与 Java

标签 java swi-prolog clpfd

我正在尝试使用 JPL 从 Java 将查询传递到 SWI-Prolog(CLPFD)。在 Java 中运行程序时出现以下异常。

查询 = Arithmetic_Expression#=X*Y+X+1,[Y, X] ins 0..100500,Arithmetic_Expression in 1..5/10/12。线程“main”中的异常 jpl.PrologException: PrologException: error(syntax_error(operator_expected), string('Arithmetic_Expression#=X*Y+X+1,[Y, X] ins 0..100500,Arithmetic_Expression in 1..5/10/12.', 21)) at jpl.Query.get1(Query.java:336) at jpl.Query .getSubstWithNameVars(Query.java:390) 在 jpl.Util.textToTerm(Util.java:163) 在 jpl.Query.(Query.java:198)

正如你所看到的,我的java程序正在生成查询作为范围联合从1..5/10/12。但是SWI-Prolog将其视为1..5/10/12。不知道为什么会发生这种情况?我想这可能是我的错误的原因。谁能帮我解决这个错误吗?

我附加/是因为在 Windows 上的 Java 程序中生成查询\将被指定为 '\',因此我的查询生成为 1..5/10/12。

为什么会传播到 SWI-Prolog?

最佳答案

错误的位置是第21个字符,因此

Arithmetic_Expression#=X*Y+X+1,[Y, X] ins 0..100500,Arithmetic_Expression in 1..5/10/12.
123456789012345678901^^

显然,您没有声明use_module(library(clpfd))

但是,之后,下一个错误将是:

ERROR: Domain error: `clpfd_domain' expected, found `1..5/10/12'

不清楚你所说的/10/20是什么意思。无论如何,我建议你先学习Prolog和clpfd,然后再从Java中使用它们。

关于java - SWI-Prolog 接口(interface)中的 CLPFD 与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209196/

相关文章:

java - 考虑到 sychronized 关键字的成本,有哪些技巧可以使延迟初始化线程安全且高效?

java - 编辑文本背景颜色

java - Android - 在继续方法之前等待 json 获取值

c - 从 XCode 中的 C 程序到 SWI-Prolog 的接口(interface)

http - 在 Prolog 中处理 PWP HTML 页面内的 http 查询字符串

prolog - Sicstus Prolog 使用变量(Sel)和值(Enum)自定义标签

java - 为 KeyStroke 设置多个掩码

prolog - 在 SWI-Prolog 中,是否有一种使用 REPL 将数字从一个基数转换为另一个基数的简单方法?

prolog - CLP(FD)-ying斐波那契卢卡斯数的同时递归可能吗?

prolog - 求所有以数字为极限的立方根