What does the s() predicate do in Prolog?

2020-07-09 07:26发布

I have been trying to learn Prolog, and am totally stumped on what the predicate s() does. I see it used often and there is so little resources on the internet about Prolog that I cannot find an answer.

Ex.

    /* 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).

3条回答
倾城 Initia
2楼-- · 2020-07-09 07:54

s/1 stands for successor. It's used to represent numbers in a logically accessible ways.

查看更多
乱世女痞
3楼-- · 2020-07-09 08:02

It is Prolog-implementation specific. It refers to a successor-predicate, see this for some more info

查看更多
别忘想泡老子
4楼-- · 2020-07-09 08:11

s/1 does not do anything in itself, and it's not really a predicate. They are just terms, a representation of the successor of their argument. So, s(0) is used to represent the successor of 0 (i.e. 1), s(s(0)) is used to represent the successor of s(0) (i.e. 2), and so on and so forth. They are so widespread in Prolog because Prolog is quite fine a language to perform symbolic computation, whereas even simple arithmetic operations feel clunky, meaning that they are not seamlessly integrated with the programming paradigm.

查看更多
登录 后发表回答