用Java实现SWI-Prolog接口中的CLPFD

用Java实现SWI-Prolog接口中的CLPFD,java,swi-prolog,clpfd,Java,Swi Prolog,Clpfd,我试图使用JPL从Java向SWI Prolog(CLPFD)传递查询。我在Java中运行程序时遇到以下异常 查询是=算术表达式#=X*Y+X+1,[Y,X]在0..100500中,算术表达式在1..5/10/12中。线程“main”jpl.PrologException中的异常:PrologException:error(语法错误(应为运算符),string('算术表达式#=X*Y+X+1,[Y,X]ins 0..100500,算术表达式在1..5/10/12',21))在jpl.Query.

我试图使用JPL从Java向SWI Prolog(CLPFD)传递查询。我在Java中运行程序时遇到以下异常

查询是=算术表达式#=X*Y+X+1,[Y,X]在0..100500中,算术表达式在1..5/10/12中。线程“main”jpl.PrologException中的异常:PrologException:error(语法错误(应为运算符),string('算术表达式#=X*Y+X+1,[Y,X]ins 0..100500,算术表达式在1..5/10/12',21))在jpl.Query.get1(Query.java:336)在jpl.Query.getSubstibuthNamevars(Query.java:390)在jpl.Util.textToTerm(Util.java:163)在jpl.Query.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^^
显然,您没有说明使用模块(库(clpfd))

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

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

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

这是文章中的一个打字错误,很抱歉。Stackoverflow也接受\\for\。但是,它不是/10/12,它是1..5\/10\/12。我可以附加use模块(库(clpfd))吗。直接在查询中的命令之前?@AnanthaPadmanabhan:您需要将其放入单独的查询中。因为实际的查询已经需要运算符。您可以先尝试顶层。这是文章中的一个错误,很抱歉。Stackoverflow也使用\\for\。但是,它不是/10/12,而是1..5\/10\/12。我添加了使用module to my query和query q=new query(“使用模块(库(clpfd))。算术表达式=X*Y+X+1”);现在错误在char 26处。它就在clpfd语句之后。