Определить функцию, которая которая производит круговую перестановку элементов в списке-аргументе вправо - 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 будет список, в котором элементы первого списка расположены в конце.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д