Ich lerne gerade Prolog und das Konzept der Differenzlisten in Prolog, also bitte mit mir.Prolog "append_dl/3" wrapper
Ich habe folgenden Code:
:- op(400, xfx, \).
append(Xs, Ys, Zs) :-
append_dl([Xs|T1]\T1, [Ys|T2]\T2, Zs\[]).
append_dl(Xs\Ys, Ys\Zs, Xs\Zs).
Wenn ich nun Listen anhängen [1,2,3] und [a, b, c] in der SWI-Interpreter es Listen von Listen
?- append([1,2,3],[a,b,c],Zs).
Zs = [[1, 2, 3], [a, b, c]].
ergibt
Während, wenn ich rufe append_dl direktly wie so:
?- append_dl([1,2,3|T1]\T1,[a,b,c|T2]\T2,Zs\[]).
T1 = [a, b, c],
T2 = [],
Zs = [1, 2, 3, a, b, c].
es funktioniert ...
Was mache ich falsch und wie sollte man diese Funktionen mit Differenzlisten korrekt umschlingen?
Danke Jungs für die Hilfe: D
Zu Ihrem Problem .... das Problem ist, dass Ihr indirekter Aufruf von 'append ([1,2,3], [a, b, c], Zs). 'Tatsächlich' append_dl ([[1 , 2,3] | T1] \ T1, [[a, b, c] | T2] \ T2, Zs \ []). 'Nicht' append_dl ([1,2,3 | T1] \ T1, [a , b, c | T2] \ T2, Zs \ []). '. Also, die inkonsistenten Ergebnisse. – lurker
Ahh Ok, ich verstehe. Danke: D –
Das Format meines vorhergehenden Kommentars reparierend ... FYI, müssen Sie \ als Operator nicht definieren. Das \ ist eine "ältere" Art, eine Differenzliste zu begrenzen. Ein Bindestrich (-) wird oft in der neueren Literatur gefunden, zum Beispiel *, append_dl (Xs-Ys, Ys-Zs, Xs-Zs). – lurker