Ok, ich weiß, es ist wirklich eine dumme Frage, aber ich kann es nicht bekommen. Es gibt eine Aufgabe, wo ich einen rekursiven Algorithmus von Euclid (gcd) finden sollte. Ich habe es für einen Fall gemacht, hier:Euclidean rekursive Algorithmus
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).
Ich brauche einen anderen Fall zu tun, in denen Rekursion von х0 ist beginnig, wenn Xi dann für die Funktion Zählen Xi + 1 Aufruf. Es sollte eine Art es sein:
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).
Aber es funktioniert nicht. Bitte, hilf mir dabei.
warum nichtdeterminiert? scheint mir deterministisch – CapelliC
Sorry ich verstehe deine Frage nicht. Wo ist 'Xi + 1'? In der ersten Code-Box steht 'nicken (X, 0, X): -! .' in Konflikt mit' nicken (X, 0, X): - X> 0.'. Der zweite wird nie aufgerufen werden. Diese Regel ist nutzlos 'nod1 (X, Y, X, Y): - nod1 (X, Y, X, Y) .' und würde eine Schleife, wenn sie aufgerufen wird. – CapelliC
gut ... ich dachte, ich muss das Ergebnis von Nicken finden. Liege ich falsch? – eeeee