我一直在尝试学习 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).
我一直在尝试学习 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).
s/1
它本身不做任何事情,它也不是一个谓词。它们只是术语,代表它们的论点的继承者。所以,s(0)
用来表示0
(ie 1
)的后继者,用来表示(ie )s(s(0))
的后继者,以此类推。它们在 Prolog 中如此广泛,因为 Prolog 是一种执行符号计算的非常好的语言,而即使是简单的算术运算也感觉很笨拙,这意味着它们没有与编程范式无缝集成。s(0)
2
s/1 代表后继。它用于以逻辑上可访问的方式表示数字。
它是特定于 Prolog 实现的。它指的是后继谓词,有关更多信息,请参见this