Я хочу создать предикат shift(List1,List2)
, где List2
- это List1
, смещенное вращательно на один элемент влево.
Пример:
?- shift([1,2,3,4],L1), shift(L1,L2), shift(L2,L3).
L1 = [2, 3, 4, 1],
L2 = [3, 4, 1, 2],
L3 = [4, 1, 2, 3].
Я создал предикат
conc([],L,L).
conc([X|T],L2,[X|T1]) :-
conc(T,L2,T1).
shift([H|T],L2) :-
conc(T,H,L2).
Однако, это неправильно, и я не понимаю, почему ... Это работает, только если H
окружен [H]
.
shift([H|T],L2) :-
conc(T,[H],L2).
Предикат без [
]
работает только с 1 сменой и выдает следующее:
?- shift([1,2,3,4],L1).
L1 = [2, 3, 4|1].
Очевидно, есть базовая концепция, с которой я путаюсь, но я не могу точно определить, что не так в одиночку. Я новичок в Прологе, поэтому любая помощь будет оценена.