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

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

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

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

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

textual
Листинг программы
  1. (defun obmen (lst)
  2.  (let*
  3.   ((len (length lst))
  4.    (rez
  5.     (subseq
  6.      (mapcar #'list (reverse lst) lst)
  7.      (floor len 2)
  8.      len
  9.   )))
  10.   (reverse
  11.    (if (oddp len)
  12.     (cons (list (caar rez)) (cdr rez))
  13.     rez
  14. ))))

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

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

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


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

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

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы