Определить функцию, которая которая производит круговую перестановку элементов в списке-аргументе вправо - Lisp
Формулировка задачи:
Определить функцию, которая которая производит круговую перестановку элементов в списке-аргументе вправо
Причем есть ограничения на функции которые можно юзать. Это только
defun; cons; ca..ar; cd..dr; '; atom; COND ;
И вот не могу нечего придумать как это сделать...
Решение задачи: «Определить функцию, которая которая производит круговую перестановку элементов в списке-аргументе вправо»
textual
Листинг программы
;; вспомогательная функция, объединяющая два списка (defun app! (lst1 lst2) (cond ((null lst1) lst2) (t (cons (car lst1) (app! (cdr lst1) lst2))))) ==> app! ;; Проверка (app! '(1 2 3) '(a b c)) ==> (1 2 3 a b c) ;; Решение задачи (defun rotate-r (lst) (app! (cdr lst) (cons (car lst) nil))) ==> rotate-r ;; Проверка (rotate-r '(1 2 3 4 5 6)) ==> (2 3 4 5 6 1)
Объяснение кода листинга программы
В коде реализованы две функции:
- app! — объединяет два списка, рекурсивно вызывая себя.
- rotate-r — производит круговую перестановку элементов в списке-аргументе вправо. Функция app! вызывает сама себя, пока первый список не станет пустым. В результате получается список, в котором элементы первого списка расположены в конце. Функция rotate-r использует функцию app! для перестановки элементов в списке. Вот что происходит в коде:
- Создаётся функция app!
- Если первый список пустой, то возвращается второй список.
- Если первый список не пустой, то функция app! вызывается рекурсивно, передавая в качестве аргумента второй список.
- В результате рекурсивного вызова функции app! возвращается новый список, в котором элементы первого списка расположены в конце.
- Новый список объединяется со вторым списком с помощью функции app!.
- Результатом работы функции app! будет список, в котором элементы первого списка расположены в конце.
- Создаётся функция rotate-r.
- В качестве первого аргумента в функцию app! передаётся второй список, а в качестве второго аргумента передаётся список, полученный с помощью функции cons.
- Результатом работы функции rotate-r будет список, в котором элементы первого списка расположены в конце.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д