Wyjaśnienie algorytmu Prolog do dołączania dwóch list

Jest to algorytm dołączający dwie listy:

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).

Rezultatem jest lista[9,2,3,4,-10,-5,6,7,8]i jest zapisany w ”Ot

Moje pytanie brzmi: jak to działa?

Rozumiem, że w każdym wywołaniu rekurencyjnym na pierwszej liście otrzymujesz tylko ogon jako listę (zmniejszając w ten sposób jego rozmiar o1 dopóki nie będzie[] ), drugi argument ”List2„w ogóle się nie zmienia, a trzeci argument ... najpierw[]i po każdym wywołaniu rekurencyjnym otrzymujesz jego ogon, ale ponieważ jest[], to zostaje[].

Jak to się stało, że nagle pojawił się trzeci argument („Ot„) mamy dołączoną listę? Czy ktoś może wyjaśnić ten algorytm krok po kroku?

questionAnswers(2)

yourAnswerToTheQuestion