2011-11-27 127 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