2017-03-06 163 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擺脫語法錯誤,但根據你的問題,這聽起來像這不是你想要的。如果你想像你在第二個代碼示例中顯示的那樣使用它們,你應該一次定義一個謂詞。