Поменяв местами левую и правую половину списка - Lisp

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

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

Как будет примерно выглядеть это задание на лиспе?

Дан список L. Если длина списка нечетна, построить список L1, поменяв местами левую и правую половину списка ч, в противном случае оставить список без изменения.

Решение задачи: «Поменяв местами левую и правую половину списка»

textual
Листинг программы
(defun task (lst)
  (let ((n (length lst)))
    (if (evenp n) (append (subseq lst (/ n 2)) (subseq lst 0 (/ n 2))) lst)))
 
==> task
 
(task '(a b c d))
 
==> (c d a b)
 
(task '(a b c d e))
 
==> (a b c d e)

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

В коде определена функция с именем task, которая принимает в качестве аргумента список lst. Внутри функции создается переменная n, которая содержит длину списка lst. Затем с помощью условного оператора if проверяется, является ли длина списка lst четным числом. Если это так, то с помощью функции append создается новый список, в который сначала добавляется левая половина исходного списка, а затем правая. Для получения левой половины списка используется функция subseq с аргументами (lst (/ n 2)), а для получения правой половины списка используется функция subseq с аргументами (lst 0 (/ n 2)). Если же длина списка нечетная, то возвращается исходный список lst. Таким образом, при выполнении кода с функцией task и аргументом '(a b c d)' будет создан новый список (c d a b), а при выполнении кода с функцией task и аргументом '(a b c d e)' будет создан новый список, идентичный исходному (a b c d e).

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


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

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

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