Увеличение числа в прологе - PullRequest
4 голосов
/ 21 ноября 2011

Я пытаюсь реализовать приращение в прологе и написал следующий код:

coordenate(X,Y,Z):- 
           X is 1, 
           Y is 1,
           Z is 1, 
           coordenate(X1,Y1,Z1), 
           X1 is X+1, 
           Y1 is Y+1, 
           Z1 is Z.

Также я попытался:

coordenate(X,Y,Z):-
          X is 1,
          Y is 1,
          Z is 1,
          coordenate(X+1,Y+1,X+1).

Ни одна из этих работ.Кто-нибудь может объяснить, почему?

1 Ответ

9 голосов
/ 21 ноября 2011

Ни одна из программ не работает, потому что они содержат бесконечную рекурсию.Вы вызываете coordenate внутри себя, без условия остановки.

Затем, чтобы помочь вам с вашей первоначальной проблемой увеличения переменной на месте: вы не можете сделать это в Прологе.Как только переменная связана, вы не можете изменить ее привязку.При программировании на Прологе, вы должны думать с точки зрения отношений и рекурсии, а не изменяемого состояния.Вот как увеличить в Прологе:

incr(X, X1) :-
    X1 is X+1.

Обратите внимание, что необходимы две переменные: одна для хранения исходного значения и одна для увеличенного значения.Чтобы сделать что-нибудь полезное с вычислениями, которые выполняет этот предикат, обе переменные должны быть аргументами предиката.Первый подразумевается как входной аргумент, второй - как выходной аргумент (хотя это не отражено в языке, это следует из того, как работает is/2).

...