Поменять местами элементы списка - 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).

Объяснение кода листинга программы

  1. exchange_center([L, C, R], [R, C, L]) - Эта часть кода меняет местами первый и третий элементы списка, оставляя второй элемент на своём месте.
  2. 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.

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы