Я хочу спросить об этом коде, почему List L2 сохраняет его значения, когда функции начинают возвращать его значение из Recursion, это похоже на «Холдинг», я думаю, что список L2 должен вернуться к его оригиналу стоимость !!Неожиданное поведение кода Пролога
my_reverse(L1,L2) :- my_rev(L1,L2,[]).
my_rev([],L2,L2) :- !.
my_rev([X|Xs],L2,Acc) :- my_rev(Xs,L2,[X|Acc]).
Выполняется должным образом. 'L2' в вашем предикате' my_rev/3' не создается до базового варианта. После создания экземпляра он не затрагивается до завершения рекурсии. – lurker
@mbratch Я думаю, что следующий вопрос - это проблема, но стоит ли возвращаться к исходной ситуации «неинициализированный» –
Нет, он не вернется назад. Это произойдет только при отступлении. Код не возвращается, но возвращается из рекурсий и создает экземпляр 'L2', пока ваш запрос на' my_reverse/2' не будет выполнен. – lurker