Написать функцию: - Lisp
Формулировка задачи:
Написать функцию F9 ((L1) 2), которая циклически сдвигает список L1 на 2 позиции вправо и группирует по 2 элемента в подсписков
Например:
Вот есть программа для сдвига:
А вот программа для разбития на подсписки:
Помогите пожалуйста сделать это все одной программкой.
> (F1 '(a b c d e f g h) 2) ((G H) (A B) (C D) (E F))
(defun <r (w n) (append (last w n) (butlast w n))) > (<r '(a b c d e) 2) (D E A B C)
(defun l4 (lst) (if (null lst) nil (cons (list (car lst) (cadr lst)) (l4 (cddr lst))))) > (l4 '( a b c d e f)) ((A B)(C D)(E F))
Решение задачи: «Написать функцию:»
textual
Листинг программы
(defun <r (w n) (append (last w n) (butlast w n))) (defun l4 (lst) (if (null lst) nil (cons (list (car lst) (cadr lst)) (l4 (cddr lst))))) (defun shift-pair (w n) (l4 (<r w n))) > (shift-pair '(a b c d e f g h) 2) ((G H) (A B) (C D) (E F))
Объяснение кода листинга программы
В коде присутствуют четыре функции:
- <r — принимает два аргумента: w и n. Внутри функции происходит использование функций last и butlast для работы с переменной w. Результат их работы через оператор append формируется в виде списка, который затем возвращается из функции.
- l4 — принимает один аргумент lst. Если lst равен null, то возвращается nil. В противном случае с помощью cons к списку lst добавляется пара значений: первое значение — car lst, второе значение — cadr lst. Затем рекурсивно вызывается функция l4 с аргументом cddr lst.
- shift-pair — принимает два аргумента: w и n. Внутри функции вызывается функция l4 с аргументом (<r w n).
-
— принимает один аргумент. В данном случае (shift-pair '(a b c d e f g h) 2). Результатом работы является вывод на экран списка ((G H) (A B) (C D) (E F)).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д