Ich versuche, ein Schwanz-rekursive Prädikat in Prolog zu schreiben: product(A,B)
, was wahr ist, wenn B
das Produkt der Zahlen in der Liste A
ist. Hier ist der Code, den ich bisher geschrieben habe:Produkt von Zahlen mit tail-rekursive Prädikat in Prolog
product(A, B) :- product(A, 1, B).
product(0, B, B) :- !.
product(A, X, B) :- Z is A - 1, Y is X * A, product(Z, Y, B).
Der Code funktioniert ohne eine Liste. Ich bin ziemlich neu in Prolog-Listen, also möchte ich fragen, was der beste Weg ist, dies zu tun. Die Abfrage sollte wie folgt sein:
?- product([1,2,3], B).
B = 6.
THX viel! Ist es tail-rekursiv? – MBD
Ja ist es. Ich bearbeite meine Antwort. Sehen Sie den Unterschied (mit trace/0) mit einem anderen Code, der nicht tail-rekursiv ist – joel76