2017-03-06 173 views
0

序言新手在这里;在SWI-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

那么你可以用两个参数定义一个谓词,然后用一个参数调用一个谓词。如果你想获得'迪克'。你应该用'robin(damian,X)'来称呼它。 –

+0

@WillemVanOnsem谢谢你!你真的为我清除了这个! – Decipherer

回答

1

您给出的第一行不是一次定义多个谓词,而是定义了一个带有两个参数的谓词。当你尝试调用它时,你正在使用一个单一的参数,这个参数在错误信息中说的是未定义的。这也是它暗示robin/2的原因。调用它像robin(damian, X)将通过统一第二个参数与X摆脱语法错误,但根据你的问题,这听起来像这不是你想要的。如果你想像你在第二个代码示例中显示的那样使用它们,你应该一次定义一个谓词。