Поменяв местами левую и правую половину списка - Lisp
Формулировка задачи:
Дан список L. Если длина списка нечетна, построить список L1, поменяв местами левую и правую половину списка ч, в противном случае оставить список без изменения.
Решение задачи: «Поменяв местами левую и правую половину списка»
(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)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д