2016-11-26 96 views
0

我正在使用SWI Prolog。我希望定義一個add函數:add(X, Y),它返回X和Y的總和。但是,我不知道如何在Prolog中定義函數。我試着這樣做使用謂詞是這樣:在Prolog中編寫函數

add(X, Y, Z) :- Z is X+Y. 

,但在執行的形式add(2, 3, X)的查詢這給出了一個錯誤說:

ERROR: toplevel: Undefined procedure: add/3 (DWIM could not correct goal)

而且,我無法理解:-:=而之間的區別編寫規則。我在某處讀到:-用於定義謂詞,而:=用於定義函數。我不確定這是否正確。我嘗試使用:=來定義函數,但它不起作用。

回答

2

把自己放置在同一目錄序言文件,鍵入以下命令來加載和編譯源文件function.pl

[function]. 

現在試運行(與你在一個文件中的函數發佈確切的代碼。 pl):

?- add(2,3,X). 
X = 5. 

使用Swi-prolog v 6.6.4。

Also, I cannot understand the difference between :- and := while writing rules. I read somewhere that :- is used to define predicates while := is used to define functions. I am not sure if this is correct. I tried using := for defining functions but it doesn't work.

邏輯程序是一組公理或規則(又名謂詞)的,定義對象之間的關係時,不使用的顯函數的概念,但由於函數確實是剛剛從輸入集合的映射到輸出集,您可以將它建模爲關係,就像您對add/3關係所做的一樣。

:-可以理解爲邏輯蘊涵(實際上我覺得符號應該看起來像向後的箭頭)

:=運營商你是指我甚至無法找到SWI序言文檔中:search results for :=。如果你可以鏈接到你找到關於它的信息的地方,那會很好。