Ваш базовый случай должен установить список копирования пустым, когда исходный список пуст. Затем рекурсивный случай должен взять H
из списка L
и добавить его в начало списка R
:
copy(L,R) :- accCp(L,R).
accCp([],[]).
accCp([H|T1],[H|T2]) :- accCp(T1,T2).
Когда вы вызываете copy
, он возвращается к базовому случаю, где R
устанавливает пустой список. Затем, когда он работает обратно, он продолжает добавлять заголовок H
известного списка [H|T1]
к началу списка переменных [H|T2]
. Это происходит до тех пор, пока не будет достигнут исходный случай, и в этот момент R
содержит полную копию L
.