2017-05-03 157 views
4

我得到了以下事件:項目(C,X,G,P),(其中C是針對該產品的數量,X它的名字,G它的價格,P它的成本)。
當我使用命令item(n3001,_,_,P)直接序言控制檯我得到的答案
G = 1.25 X = 100但是當我寫的公式p3(C)-: item(C,_,_,P).後來我諮詢文本,我得到的答案yes上。
我的問題澄清是怎麼一次我得到我想要的P的價值,而另一次我得到它是真的還是假的?序言PROGRAMM返回的是yes,而不是價值

回答

5

Prolog中沒有返回值,p3/1不構成函數而是關係。你定義

p3(C) :- 
    item(C,_,_,P). 

寫着:如果item(C,_,_,P)成功,則p3(C)成功爲好。爲了討論的方便,我們假設你的代碼包括以下事實:

item(n3001,100,1.25,1). 

如果查詢

?- p3(n3001). 

的Prolog與n3001您的規則的頭部結合C,然後嘗試你的目標item(C,_,_,P)哪個成功。因此,規則成功,Prolog的告訴你:

?- p3(n3001). 
yes 

如果你想知道對應n3001你必須定義何處P出現在規則的頭部和規則,如價格:

p3(C,P) :- 
    item(C,_,_,P). 

如果您查詢,您將能看到相應n3001P值:

?- p3(n3001,P). 
P = 1 

如果查詢項/ 4直接P出現在參數,因此你能看到它的替換,滿足您的查詢:

?- item(n3001,_,_,P). 
P = 1 
+2

也可以看到一個謂語函數從條款到布爾值 - 即真(是)和假(不)。無論如何,沒有「輸出」的說法,信息是相當有限的。 –

+1

很好解釋。非常感謝。 –

+2

@ lambda.xy.x:是的,你是對的。但我的觀點是,除非你想知道謂詞是否適用於特定的(元組)參數,否則你會留下一些參數作爲變量並讓Prolog計算它們。因此,像在其他編程範例中那樣,根據函數和返回值來考慮謂詞通常不是很有用。 – tas

相關問題