在SWI Prolog中定义一系列事实

在SWI Prolog中定义一系列事实,prolog,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)). tr

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.
我不确定第一行的语法错误是什么,我试着用很多方法来改变它


谢谢

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

那么您可以定义一个带两个参数的谓词,然后调用一个带一个参数的谓词。如果您想获得
dick
。你应该叫它罗宾(达米安,X)@WillemVanOnsem谢谢你!你真的帮我弄清楚了!