Prolog 查询在consult中工作,但不在JPL和命令行中工作

Prolog 查询在consult中工作,但不在JPL和命令行中工作,prolog,swi-prolog,jpl,Prolog,Swi Prolog,Jpl,我正在使用JPL并向Swi Prolog启动一些查询。 该程序可以很好地处理所有查询,但只有一个查询除外 此查询不起作用: assert(like(X, Y) :- element(I, [1, 2, 3], X), element(I, [2, 3, 4], Y) ). 线程“main”jpl.PrologException中的异常:PrologException:error(未实例化错误(元素(_3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

我正在使用JPL并向Swi Prolog启动一些查询。 该程序可以很好地处理所有查询,但只有一个查询除外

此查询不起作用:

assert(like(X, Y) :- element(I, [1, 2, 3], X), element(I, [2, 3, 4], Y) ).
线程“main”jpl.PrologException中的异常:PrologException:error(未实例化错误(元素(_3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,上下文(:(系统,/(断言,2)),“第二个参数”)

如果我将查询放在一个.pl fle中(显然不带assert)并使用consult运行它,那么就可以了! 但是如果我在控制台模式下键入查询,则返回与JPL相同的错误。
那么,问题出在哪里呢?

您离获得照明非常近。它在控制台上也不能工作!然后您将尝试更改语法。了解Prolog操作符模型,请尝试

?-assert((比如(X,Y):-element(I[1,2,3],X),element(I[2,3,4],Y)))

它会起作用的


您的问题是运算符(:-)/2 WRT运算符(,)/2的优先级。

您离获得照明非常近。它在控制台上也不能工作!然后您将尝试更改语法。了解Prolog操作符模型,请尝试

?-assert((比如(X,Y):-element(I[1,2,3],X),element(I[2,3,4],Y)))

它会起作用的


您的问题是运算符(:-)/2 WRT运算符(,)/2的优先级。

很好!它只使用了两个括号…但是,我不明白为什么。问题是参数的编号,还是(:-)/2运算符的错误使用?对于3个参数…我必须添加更多的方括号?Prolog使用操作符,如:-或,作为术语上的可配置语法sugar-或更好的-结构。您不需要添加更多的括号。只要两个就可以使所有的表达式a:-b,c,d‘合适’了!它只使用了两个括号…但是,我不明白为什么。问题是参数的编号,还是(:-)/2运算符的错误使用?对于3个参数…我必须添加更多的方括号?Prolog使用操作符,如:-或,作为术语上的可配置语法sugar-或更好的-结构。您不需要添加更多的括号。只有两个将使所有表达式a:-b,c,d‘适合’