Доработка программы (сдвиг элементов списка) - Prolog
Формулировка задачи:
Помогите пожалуйста доделать программу
Надо написать предикат p(+X, +N, ?Y), осуществляющий циклическую перестановку элементов в любом списке на N позиций (знак N говорит о направлении сдвига).
?– p([a,b,c,d],1,Y).
Y=[d,a,b,c]
Вот программа:
Необходимо сделать так, что бы программа выполняла сдвиг не больше чем L раз, где L - длина списка.
Например:
Не могу понять как доделать второе условие, что бы проверялась ещё и длина списка.
Заранее спасибо
Решение задачи: «Доработка программы (сдвиг элементов списка)»
textual
Листинг программы
% если левый список пуст, то итоговый список совпадает с правым списком my_append([], RightList, RightList). % иначе, взять голову из левого списка и перенести в голову итогового списка, my_append([LeftHead|LeftTeil], RightList, [LeftHead|RightPart]) :- % продолжить для хвоста левого списка my_append(LeftTeil, RightList, RightPart). my_length(L, N) :- my_length(L, N, 0). my_length([], N, N0) :- integer(N), N = N0, !. my_length([], N, N). my_length([_|T], N, N0) :- N1 is N0 + 1, my_length(T, N, N1).
Объяснение кода листинга программы
my_append([], RightList, RightList).
- если левый список пуст, то итоговый список совпадает с правым спискомmy_append([LeftHead|LeftTeil], RightList, [LeftHead|RightPart]) :-
- иначе, взять голову из левого списка и перенести в голову итогового списка, а для хвоста левого списка продолжить рекурсивно вызыватьmy_append
my_length(L, N) :-
- функция для вычисления длины спискаL
и сохранения результата в переменнойN
my_length([], N, N0) :-
- базовый случай: если список пуст, то его длина равна 0 и передается вN0
N = N0, !.
- факт, чтоN
равноN0
my_length([], N, N).
- конечный случай: если список пуст, то его длина равна 0my_length([_|T], N, N0) :-
- общий случай: рекурсивный вызов функцииmy_length
для хвоста спискаT
с обновленным значениемN0
N1 is N0 + 1
- обновление значения переменнойN
на 1my_length(T, N, N1).
- рекурсивный вызов функцииmy_length
для хвоста спискаT
с обновленным значениемN1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д