我一直在努力学习Prolog,并且完全被谓词s()所做的事情所困扰。 我看到它经常使用,互联网上关于Prolog的资源很少,我找不到答案。
实施例
/* sum(Is,S) is true if S is the sum of the list of integers Is. */
sum([],0).
sum([0|Is],S):-sum(Is,S).
sum([s(I)|Is], s(Z) ):-sum([I|Is],Z).
答案 0 :(得分:14)
s/1
本身没有做任何事情,而且它本身并不是谓词。它们只是术语,是他们论证的继承者的代表。因此,s(0)
用于表示0
的后继者(即1
),s(s(0))
用于表示s(0)
的后继者(即{{1} }}), 等等等等。它们在Prolog中如此广泛,因为Prolog是一种非常好的执行符号计算的语言,而即使是简单的算术运算也会感觉很笨,这意味着它们不能与编程范例无缝集成。
答案 1 :(得分:1)
s / 1代表继任者。它用于以逻辑上可访问的方式表示数字。
答案 2 :(得分:0)
具体是Prolog实施。它指的是后继谓词,有关更多信息,请参阅this