Prolog
-
Hi,
kann einer Prolog. Versuch gerade die Multiplikation auszudrücken. aber irgendwie weiss ich nicht wie....
multi(X,Y,0). multi(s(X),Y,sub(s(X))):-multi(X,Y,Z).
-
multi(Faktor1, Faktor2, Ergebnis) :- Ergebnis is Faktor1 * Faktor2.
% So müsste es gehen ...
-
Oder sonst, wie definierst Du s und sub ?
-
Wie tauscht man denn 2 Variablen.
swap(X,Y):- Y,Z .
Klappt nicht ganz
-
Du musst erst Addition definieren und kannst dann darüber Multiplikation ausdrücken. Z.B. so:
plus(z, X, X). plus(s(X), Y, s(Z)) :- plus(X, Y, Z). mult(z, _, z). mult(s(X), Y, Z) :- mult(X, Y, Z2), plus(Y, Z2, Z).
-
und wie tauscht man 2 Variablen ?
-
Das ist wohl eine Möglichkeit:
swap( a( C , Y , V ) , a( Y , C , V ) ).
-
So gehts wohl.
swap(a(X,Y),a(Y,X)).
-
Wie wird denn das intern aufgelöst.
child(anne,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y) :- child(X,Y). descend(X,Y) :- child(X,Z), descend(Z,Y).
Frage: descend(anne,emily)
Wieviele Versuche braucht Prolog für die Antwort stammt Anne von Emily ab.
-
Ist bei Dir das a, nicht einmal zwei und einmal dreistellig ? Das dürfte
nicht unifizieren, meiner Meinung nach.
-
Ob vertauschen so einfach geht, glaube ich nicht. Wenn die Variable X einen
Wert hat, lässt sich dieser nicht überschreiben. Es müsste eine Möglichkeit
zur Aufhebung der Variablenbindung geben.
-
Ja klar das sind 2 verschiedene swaps
Aber wie ist das mit dem descend ?
-
Da gibt es auch die sogenannte Tail-Recursion. Wenn Prolog diese Optimierung
vornimmt, spart es Rechenzeit. Soviel ich weiss. Was die Vertauschung angeht,
so ist diese wahrscheinlich nicht unbedingt notwendig. Prolog ist trotzdem
mächtig genug.