Определить функцию, которая которая производит круговую перестановку элементов в списке-аргументе вправо - 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)

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

В коде реализованы две функции:

  1. app! — объединяет два списка, рекурсивно вызывая себя.
  2. rotate-r — производит круговую перестановку элементов в списке-аргументе вправо. Функция app! вызывает сама себя, пока первый список не станет пустым. В результате получается список, в котором элементы первого списка расположены в конце. Функция rotate-r использует функцию app! для перестановки элементов в списке. Вот что происходит в коде:
  3. Создаётся функция app!
  4. Если первый список пустой, то возвращается второй список.
  5. Если первый список не пустой, то функция app! вызывается рекурсивно, передавая в качестве аргумента второй список.
  6. В результате рекурсивного вызова функции app! возвращается новый список, в котором элементы первого списка расположены в конце.
  7. Новый список объединяется со вторым списком с помощью функции app!.
  8. Результатом работы функции app! будет список, в котором элементы первого списка расположены в конце.
  9. Создаётся функция rotate-r.
  10. В качестве первого аргумента в функцию app! передаётся второй список, а в качестве второго аргумента передаётся список, полученный с помощью функции cons.
  11. Результатом работы функции rotate-r будет список, в котором элементы первого списка расположены в конце.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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