在 Prolog 中,term是常数、原子、变量或复合词.
A 复合词由一个functor与 1 个或多个论据。以下是terms:
a. % a term with functor 'a' and 0 arguments
a(b,c). % a term with functor 'a' and 2 arguments, b and c
空列表[]
is term更具体地说,atom。一个列表[H|T]
本质上表示为'.'(H, T)
因此,是复合词并且,因此,还有一个term.
你还可以有更复杂的复合词:
a(b(c,d), e(f,g(h)))
Here, a
是一个有两个参数的函子:b(c,d)
, and e(f,g(h))
, 等等。
A 复合词也可以称为结构因为它们为您提供了一种构建事实的方法:
customer(name(john,doe), address(street('123 Main St'), city('Framusville'), ...), ...).
A 谓语从句是一个具体的结构 or term。在 Prolog 中,一切都是结构 or term形式:functor(arg1, arg2, ...)
.
我们看一下谓语从句:
f(X) :- a(X).
它本身就是一个结构其内部表示为term: :-(f(X), (a(X)))
。时期 (.
) 是终结符。是什么让它成为谓词正如@false 所示,是:
它位于“顶层”(不是更高级别术语中的参数)
它的函子是:-
A 谓语从句也被称为rule自任期以来,:-(A, B)
定义了relation: A
为真,如果B
is true。期限f(X)
被称为head谓语从句的。
一个或多个的集合谓语从句它们都有相同的functor and arity(参数数量)的头被称为谓词.
看你的第二个例子:
jealous(X,Y) :- loves(X,Z), loves(Y,Z).
这也是一谓语从句为了谓词 jealous/2
(the 谓词谁的函子是jealous
并且数量为 2)。它在内部会表达为这样复合词: :-(jealous(X,Y), ','(loves(X,Z), loves(Y,Z)))
。这意味着上面的表达式也是一个复合词.
您可以使用以下命令查看 Prolog 如何查看规范形式的表达式write_canonical/1
:
| ?- write_canonical((jealous(X,Y) :- loves(X,Z), loves(Y,Z))).
:-(jealous(_17,_18),','(loves(_17,_22),loves(_18,_22)))
SWI Prolog 网站有一个非常好的Prolog 术语表.