Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the s() predicate do in Prolog?

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).
like image 336
okin33 Avatar asked Nov 19 '11 20:11

okin33


2 Answers

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.

like image 109
Giulio Piancastelli Avatar answered Nov 07 '22 19:11

Giulio Piancastelli


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

like image 1
CapelliC Avatar answered Nov 07 '22 20:11

CapelliC