【问题标题】:CLPFD in SWI-Prolog interface with JavaSWI-Prolog 接口中的 CLPFD 与 Java
【发布时间】:2014-04-22 02:12:07
【问题描述】:

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

查询是 = Arithmetic_Expression#=X*Y+X+1,[Y, X] ins 0..100500,Arithmetic_Expression in 1..5/10/12。线程“主”jpl.PrologException 中的异常:PrologException:错误(syntax_error(operator_expected),字符串('Arithmetic_Expression#=X*Y+X+1,[Y, X] ins 0..100500,Arithmetic_Expression in 1..5 /10/12.', 21)) 在 jpl.Query.get1(Query.java:336) 在 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。不知道为什么会这样?我想这可能是我错误的原因。谁能帮我解决这个错误?

我正在附加 / 因为在我的 Java 程序中到 Windows 以生成查询 \ 将被给出为 '\' 因此我的查询生成为 1..5/10/12。

为什么这会传播到 SWI-Prolog?

【问题讨论】:

    标签: java swi-prolog clpfd


    【解决方案1】:

    错误的位置是第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中使用它。

    【讨论】:

    • 这是帖子中的错字,抱歉。 Stackoverflow 也将 \\ 用于 \。但是,它不是 /10/12,而是 1..5\/10\/12。我可以附加 use_module(library(clpfd))。直接在查询中的命令之前?
    • @AnanthaPadmanabhan:您需要将其放入单独的查询中。由于实际查询已经需要操作员在场。您可以先尝试顶层。
    • 这是帖子中的错字,抱歉。 Stackoverflow 也将 \\ 用于 \。但是,它不是 /10/12,而是 1..5\/10\/12。我将 use 模块添加到我的查询和 Query q=new Query("use_module(library(clpfd)).Arithmetic_Expression=X*Y+X+1");现在错误在 char 26 处。就在 clpfd 语句之后。
    猜你喜欢
    • 2016-01-16
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多