oki*_*n33 7 prolog successor-arithmetics
我一直在努力学习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).
Run Code Online (Sandbox Code Playgroud)
Giu*_*lli 14
s/1
它本身没有做任何事情,它并不是一个真正的谓词.它们只是术语,是他们论证的继承者的代表.因此,s(0)
用于表示0
(ie 1
)的后继,s(s(0))
用于表示s(0)
(ie 2
)的后继,依此类推等等.它们在Prolog中如此广泛,因为Prolog是执行符号计算的非常好的语言,而即使是简单的算术运算也感觉很笨,这意味着它们不能与编程范例无缝集成.