s()谓词在Prolog中做了什么?

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是执行符号计算的非常好的语言,而即使是简单的算术运算也感觉很笨,这意味着它们不能与编程范例无缝集成.

  • 很好地说,+ s(0)XD (8认同)