Вот можно так попробовать:
Код | /* Сначала научимся отделять от списка последний элемент last(Список, Последний элемент, Список без последнего элемента) */ last([LastItem|T], LastItem, []) :- T=[]. last([FirstItem|T], LastItem, [FirstItem|NewList]) :- not(T=[]), last(T, LastItem, NewList).
/* Добавляет элемент в конец списка addLast(Список, Элемент, Новый список) */ addLast([], X, [X]). addLast([H|T], X, [H|L]) :- addLast(T, X, L).
/* Меняет местами первый и последний элементы списка move(Старый список, Новый список) */ move([X], [X]). move(Li, [LastItem|L]) :- last(Li, LastItem, [FirstItem|CenterList]), addLast(CenterList, FirstItem, L).
|
Правда может быть я изобрел велосипед и есть готовые функции для поиска последнего элемента, и для добавления в конец
P.S. Проверял на SWI-Prolog вродебы работает |