Написать функцию: - 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))

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

В коде присутствуют четыре функции:

  1. <r — принимает два аргумента: w и n. Внутри функции происходит использование функций last и butlast для работы с переменной w. Результат их работы через оператор append формируется в виде списка, который затем возвращается из функции.
  2. l4 — принимает один аргумент lst. Если lst равен null, то возвращается nil. В противном случае с помощью cons к списку lst добавляется пара значений: первое значение — car lst, второе значение — cadr lst. Затем рекурсивно вызывается функция l4 с аргументом cddr lst.
  3. shift-pair — принимает два аргумента: w и n. Внутри функции вызывается функция l4 с аргументом (<r w n).
  4. — принимает один аргумент. В данном случае (shift-pair '(a b c d e f g h) 2). Результатом работы является вывод на экран списка ((G H) (A B) (C D) (E F)).

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


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

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

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