Хорошо, я знаю, что это действительно глупый вопрос, но я не могу его получить. Есть задача, где я должен найти рекурсивный алгоритм Euclid (gcd). Я сделал это для одного случая, здесь:Эвклидово-рекурсивный алгоритм
nondeterm nod (integer,integer,integer)
CLAUSES
nod (X,0,X):- !.
nod (0,X,X):- !.
nod (X,0,X):-X>0.
nod (X,Y,G):-Y>0, Z = X mod Y, nod (Y,Z,G).
мне нужно сделать еще один случай, когда рекурсия НАЧАЛА от Х0, когда Xi то вызова для функции подсчет Xi + 1. Это должно быть вроде этого:
PREDICATES
nondeterm nod (integer,integer,integer)
nondeterm nod1 (integer,integer,integer,integer,integer)
CLAUSES
nod(X,Y,Z):- nod1(X,Y,Z,0,0).
nod1 (X,Y,Z,X,Y):- Otvet = Z, write("Otvet=", Otvet, "\n"), !.
nod1 (X,Y,X,Y):- nod1 (X,Y,X,Y).
nod1 (X,Y,Z,X1,Y1):-
X1>Y1, X>0, Y>0,
Y2 = X1 mod Y1,
X2 = Y1,
nod1(X,Y,Z,X2,Y2).
Но это не работает. Пожалуйста, помогите мне с этим.
Почему нет? кажется детерминированным для меня – CapelliC
Извините, я не понимаю ваш вопрос. Где «Xi + 1»? В первом поле кода 'nod (X, 0, X): -! .' конфликтует с' nod (X, 0, X): - X> 0.'. Второе никогда не будет называться. Это правило бесполезно «nod1 (X, Y, X, Y): - nod1 (X, Y, X, Y).» И будет циклическим, если вызвано. – CapelliC
ну ... я думал, потому что мне нужно найти результат кивок. Я ошибаюсь? – eeeee