我正在尝试使用 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/