Erläuterung eines Prolog-Algorithmus zum Zusammenfügen von zwei Listen

Dies ist ein Algorithmus zum Zusammenfügen von zwei Listen:

Domains
list= integer*

Predicates
nondeterm append(list, list, list)

Clauses
append([], List, List) :- !.
append([H|L1], List2, [H|L3]) :- append(L1, List2, L3).

Goal
append([9,2,3,4], [-10,-5,6,7,8], Ot).

Das Ergebnis ist eine Liste[9,2,3,4,-10,-5,6,7,8], und es ist gespeichert in "Ot".

Meine Frage ist, wie funktioniert das?

Was ich verstehe ist, dass in jedem rekursiven Aufruf in der ersten Liste nur der Schwanz als Liste angezeigt wird (wodurch die Größe um 1 verringert wird1 bis es ist[] ), das zweite Argument "List2"ändert sich überhaupt nicht, und das dritte Argument ... zuerst ist es[], und nach jedem rekursiven Aufruf bekommt man seinen Schwanz, aber da ist es[], es bleibt[].

Also, wie kommt es plötzlich im 3. Argument ("Ot") wir haben die beigefügte Liste? Kann jemand diesen Algorithmus Schritt für Schritt erklären?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage