在SWI-Prolog中定义一系列事实

时间:2017-03-06 14:41:13

标签: prolog

Prolog新手在这里;

我试图一次定义多个事实,但我不断收到以下错误:

?- assert(robin(damian, dick)).
true.

?- robin(damian).

ERROR: Undefined procedure: robin/1
ERROR:     However, there are definitions for:
ERROR:         robin/2
false.

单独的陈述似乎工作正常:

?- assert(robin(damian)).
true.

?- assert(robin(dick)).
true.

?- robin(damian).
true.

我不确定第一行的语法错误是什么,我尝试过多次改变它。

谢谢!

1 个答案:

答案 0 :(得分:1)

您提供的第一行不是一次定义多个谓词,而是定义具有两个参数的单个谓词。然后,当您尝试调用它时,您正在使用单个参数,该参数未定义,如错误消息中所述。这也是它建议robin/2的原因。像robin(damian, X)一样调用它将通过将第二个参数与X统一来消除语法错误,但根据您的问题,听起来这不是您想要的。如果您希望像在第二个代码示例中显示的那样使用谓词,那么您可能应该一次定义一个谓词。