Что предикат s () делает в Прологе? - PullRequest
7 голосов
/ 20 ноября 2011

Я пытался выучить Пролог, и я совершенно ошеломлен тем, что делает предикат s ().Я вижу, что он часто используется, и в Интернете так мало ресурсов о Прологе, что я не могу найти ответ.

Пример.

    /* 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 ]

14 голосов
/ 20 ноября 2011

s/1 ничего не делает само по себе, и это на самом деле не предикат.Они просто термины, представление преемника их аргумента.Таким образом, s(0) используется для представления преемника 0 (т. Е. 1), s(s(0)) используется для представления преемника s(0) (т. Е. 2) и т. Д. И т. Д.Они настолько широко распространены в Прологе, потому что Пролог - прекрасный язык для выполнения символьных вычислений, в то время как даже простые арифметические операции кажутся неуклюжими, что означает, что они не полностью интегрированы с парадигмой программирования.

1 голос
/ 20 ноября 2011

с / 1 означает преемника.Используется для представления чисел логически доступными способами.

0 голосов
/ 20 ноября 2011

Это специфично для Пролога.Это относится к предикату-преемнику, см. this для получения дополнительной информации

...