Поменять местами элементы списка - Prolog (246158)
Формулировка задачи:
В списке нечетной длины поменять местами элементы,которые находятся рядом со средним элементом.
Знаю,что такой вопрос уже был, но возможно ли сделать это с помощью рекурсивных вызовов?
Заранее благодарен за любую помощь
Решение задачи: «Поменять местами элементы списка»
textual
Листинг программы
exchange_center([L, C, R], [R, C, L]). exchange_center([L | Xs1], [L | Ys1]) :- append(Xs2, [R], Xs1), exchange_center(Xs2, Ys2), append(Ys2, [R], Ys1).
Объяснение кода листинга программы
- exchange_center([L, C, R], [R, C, L]) - Эта часть кода меняет местами первый и третий элементы списка, оставляя второй элемент на своём месте.
- exchange_center([L | Xs1], [L | Ys1]) :- - Эта часть кода рекурсивно вызывает функцию exchange_center для оставшихся элементов списка, добавляя в конец списка элемент R. a. append(Xs2, [R], Xs1) - Эта часть кода добавляет в конец списка Xs1 элемент R, разделяя список на две части: Xs2 и Xs1. b. exchange_center(Xs2, Ys2) - Эта часть кода вызывает рекурсивный вызов функции exchange_center для списка Xs2. c. append(Ys2, [R], Ys1) - Эта часть кода добавляет в конец списка Ys1 элемент R, разделяя список на две части: Ys2 и Ys1.