Определите функцию для преобразования одноуровнего списка в двухуровневый - Lisp

Узнай цену своей работы

Формулировка задачи:

Определите функцию для преобразования одноуровнего списка в двухуровневый, в котором каждый подсписок - это пара элементов исходного списка, соответственно, первый и последний элементы, второй и предпоследний и т.д. Последний подсписок может состоять из одного элемента.(Например (12345)->((15)(24)(3)))

Решение задачи: «Определите функцию для преобразования одноуровнего списка в двухуровневый»

textual
Листинг программы
(defun obmen (lst)
 (let*
  ((len (length lst))
   (rez
    (subseq
     (mapcar #'list (reverse lst) lst)
     (floor len 2)
     len
  )))
  (reverse
   (if (oddp len)
    (cons (list (caar rez)) (cdr rez))
    rez
))))

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

В данном коде определена функция obmen, которая принимает в качестве аргумента одноуровневый список lst. Список начинается с определения переменной len, которая содержит длину списка lst. Далее определена переменная rez, которая будет использоваться для хранения преобразованного списка. С помощью функции mapcar список lst преобразуется в список пар, где каждый элемент списка lst становится первым элементом пары, а следующий элемент списка lst становится вторым элементом пары. Затем с помощью функции subseq из полученного списка пар выбираются первые (len/2) пар. Если длина списка lst нечетная, то добавляется еще одна пара, которая содержит первый элемент списка lst. В конце код возвращает преобразованный список в обратном порядке.

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


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

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

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