foo / 3 - это предикат, который делает что-то с двумя списками и выводит другой.
foo([], Ys, Zs) :-
append(Zs, Ys, Final),
write(Final),
% ?
foo([X|Xs], Ys, Zs) :-
stuff(X, Ys, NewYs, NewZs),
foo(Xs, NewYs, NewZs).
Я хочу, чтобы Final был L в вызове верхнего уровня, как foo ([1,2, 3], [a, b, c], L).Я посмотрел на след, кажется, я делаю что-то задом наперед;
...
Exit: (9) write([c]) ?
Exit: (8) foo([], [], [c]) ?
Exit: (7) foo([c], [], []) ?
L = [].