2011-11-27 77 views

回答

4

當人給在序言謂詞信息,這些公約通常用於:

元數:謂詞/ 3裝置謂詞接受3個參數。

參數:謂詞(+元素,+列表,結果)表示元素和列表不應該是自由變量,並且結果應該是一個自由變量,以便謂詞正常工作。 ?在可以同時使用時,@在上面的答案中被提及,但並未真正被使用(至少在swi-pl doc中)並且意味着在調用期間輸入不會被綁定。

所以,告訴somepredicate作品+,+模式是告訴一個快捷方式:

% somepredicate/2 : somepredicate(+Input1, +Input2) 
3

這意味着謂詞的參數都是輸入參數(儘管不是純輸入)。

This page對Prolog的所有通話模式都有一個成功的描述。

4

爲了給你,你需要告訴我們的不僅僅是+,+多了肯定的答案。對於參數只有原子的謂詞,事情已經很好的定義了:p(+,+)意味着謂詞只能用兩個參數都是原子來調用。

但是,如果我們有,說清單,事情更復雜。在這種情況下有兩個含義。考慮member/2,其成功爲member(2,[1,2,3])

查詢member(2,[X])member(2,[X|Xs])現在+,+還是不是?

直接解釋這也是在ISO Prolog的使用說(報價參數的8.1.2.2模式下,ISO/IEC 13211-1:1995):

  • +的參數應該被實例化,

從這個意義上說,上面的兩個查詢都是+,+。

但是,還有另一種解釋隱含地假設我們有權訪問謂詞的定義。這種解釋源於DEC-10 Prolog的模式聲明,它是Prolog系統中的第一個。所以,讓我們看看member/2

member(X, [X|_]). 
member(X, [_|Xs]) :- 
    member(X, Xs). 

A模式member(+,+)現在將意味着執行目標時,此模式將舉行所有子目標。也就是說,member(2,[X])將是+,+而member(2,[X|Xs])而不是 ,因爲它的子目標member(2,Xs)

人們很頻繁地混淆這些概念。所以當你談論列表或其他複合術語時,它有助於詢問是什麼意思。

欲瞭解更多模式,請參閱this answer