Cдвиг списка на прологе!!!!!!
Помогите, пожалуйста!!!!!Написать программу для циклического сдвига списка вправо на заданное число элементов. Например: список [6, 5, 4, 3, 2, 1], циклически сдвинутый вправо на 2 элемента, преобразуется в список [2, 1, 6, 5, 4, 3].
Код:
rolr(L,0,L).
rolr(L,N,L1):-rolr_one(L,L2),
N2 is N-1,
rolr(L2,N2,L1).
% Сдвиг на один
rolr_one([H|T],L1):-ins_last(T,H,L1).
% Вставляет в конец
ins_last([],X,[X]).
ins_last([H|T],X,[H|T1]):-ins_last(T,X,T1).
rolr(L,N,L1):-rolr_one(L,L2),
N2 is N-1,
rolr(L2,N2,L1).
% Сдвиг на один
rolr_one([H|T],L1):-ins_last(T,H,L1).
% Вставляет в конец
ins_last([],X,[X]).
ins_last([H|T],X,[H|T1]):-ins_last(T,X,T1).
Код:
rolr(L,0,L).
rolr(L,N,L1):-rolr_one(L,L2),
N2 is N-1,
rolr(L2,N2,L1).
% Сдвиг на один
rolr_one(L,[E|T]):-get_last(L,E,T).
% Добывает последний и остаток
ins_last([X],X,[]).
ins_last([H|T],X,[H|T1]):-get_last(T,X,T1).
rolr(L,N,L1):-rolr_one(L,L2),
N2 is N-1,
rolr(L2,N2,L1).
% Сдвиг на один
rolr_one(L,[E|T]):-get_last(L,E,T).
% Добывает последний и остаток
ins_last([X],X,[]).
ins_last([H|T],X,[H|T1]):-get_last(T,X,T1).