Так что я в процессе изучения пролога.
Все, что я хочу сделать, это изменить порядок элементов и в результате получить новый список.
При отслеживании решения я получаю правильный ответ, однако, как только я достигаю базового случая, Пролог снова начинает очищать список и в результате возвращает пустой список.
Код:
accRev([], [], _) :- !.
accRev([], A, R) :- accRev(A, [], R), !.
accRev([H, H2 |T], A, R):-
append(R, [H], R1),
append(A, [H2], A1),
accRev(T, A1, R1), !.
accRev([H], A, R):-
append(R, [H], R1),
accRev(A, [], R1), !.
accRevT([], [], _) :- !.
accRevT([], A, R) :- accRev(A, [], R), !.
accRevT([H, H2 |T], A, R):-
append(R, [H], R1),
append(A, [H2], A1),
accRevT(T, [H2 | A], [H | R]), !.
accRevT([H], A, R):-
append(R, [H], R1),
accRevT(A, [], [H | R]), !.
Изображение трассировки
Обратите внимание, как он достигает accRev([], [], [1, 3, 2, 4]) (это то, что я хотел бы, чтобы R стал, R = [1, 3, 2, 4])
Так что же не так?