2017-05-20 6 views
0
polarbear([],H,[H]). 
polarbear([H|T],Y,[H|Z]):- polarbear(T,Y,Z). 

Dies ist der Prologcode. Bei der Eingabe ?-polarbear([1,2], 6, P). Get P =[1,2,6].Spezifisches Beispiel der Rekursion in Prolog

Die Sache ist, ich verstehe einfach nicht, wie es funktioniert und ich habe versucht herauszufinden, wie Prolog macht, was es tut.

Ich habe etwas Erfahrung mit Prolog, aber ich verstehe das nicht, also würde jede Anleitung, wie es tut, was es tut, um mir zu helfen, Prolog zu verstehen, sehr geschätzt werden.

Antwort

0

gibt an, dass das erste Argument eine Liste mit Kopf H und Schwanz T ist und das dritte Argument eine Liste mit Kopf H und Schwanz Z ist. So zwingt es (durch Vereinheitlichung) die Köpfe der beiden Listen gleich zu sein . Rekursiv werden die zwei Listen identisch, mit der Ausnahme, dass die dritte Argumentliste am Ende ein Element mehr hat (Element Y) und dies durch die erste Klausel definiert ist. Beachten Sie, dass die zweite Klausel nur für Listen mit einem oder mehreren Elementen funktioniert. Als Basis der Rekursion, wenn wir die leere Liste untersuchen, enthält die dritte Liste aufgrund der ersten Klausel nur ein weiteres Element, nämlich das Element Y.

+0

Danke. Das hat definitiv geholfen. Also versucht es die erste Klausel und scheitert, dann teilt es die bereitgestellte Liste in Kopf und Schwanz, die 6 wird zu Y und das letzte Argument bleibt als unbekannte Variable. Dann führt er den Polarbear erneut aus, scheitert an der ersten Klausel, geht wieder an die zweite Klausel und dann wird ich verwirrt, wie sich die Werte verschieben. Tut mir leid, ich versuche nur genau zu verstehen, was es denkt, ich bin überfordert, kann aber keine gute Ressource finden. –

+1

Erster Aufruf (zweiter Satz): H = 1, T = [2], Y = 6. Zweiter Aufruf: H = 2, T = [], Y = 6. Dritter Aufruf der erste Satz stimmt überein, also list = [6 ]. Dann zurück zum zweiten Anruf (H = 2), list = [2,6], erster Anruf (H = 1) list = [1,2,6]. –

Verwandte Themen