Ich habe den folgenden Code, der offenbar die Standardmethode ist, um die Vereinigung zwischen 2 Listen anzuzeigen:
union([Head|Tail],List2,Result) :-
member(Head,List2), union(Tail,List2,Result).
union([Head|Tail],List2,[Head|Result]) :-
\+ member(Head,List2), union(Tail,List2,Result).
union([],List2,List2).
und bei der folgenden Eingabe:
union([a,b,c,d,2,3], [b,c,3,99], Result).
liefert mir die folgende Ausgabe:
Result = [a,d,2,b,c,3,99] ?
yes
Meine Frage ist: Wie macht Prolog das? Liste2 wird durch die rekursiven Aufrufe nie verändert, aber am Ende werden alle Elemente ausgedruckt, die die Vereinigung zwischen den 2 ursprünglichen Listen bilden.
Bitte helfen Sie mir, diesen Code zu verstehen.
Ich danke Ihnen.