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?