Проверка и реверсирование списка - Lisp
Формулировка задачи:
Проверяем подсписок на элементы с d по k, если таковые имеются, то выводим реверсированный список, если нет, то исходный.
Решение задачи: «Проверка и реверсирование списка»
textual
Листинг программы
(defun wtf2 (lst d k) (let ((pos-d (position d lst :test #'=)) (pos-k (position k lst :test #'=))) (cond ((or (null pos-k) (null pos-d)) (reverse lst)) (T (append (subseq lst 0 (+ pos-d 1)) (subseq lst pos-k (length lst))))))) * (wtf2 '(1 2 3 4 5 6 7 8 9 10) 5 10) (1 2 3 4 5 10) * (wtf2 '(1 2 3 4 5 6 7 8 9 10) 25 1) (10 9 8 7 6 5 4 3 2 1)
Объяснение кода листинга программы
В коде определена функция wtf2
, которая принимает два аргумента: lst
и d
. Аргумент lst
представляет собой список, который необходимо проверить и/или перевернуть, а аргумент d
- это элемент, который необходимо найти в списке.
Внутри функции используется оператор let
, чтобы создать две переменные: pos-d
и pos-k
. Переменная pos-d
содержит позицию первого вхождения элемента d
в списке lst
, а переменная pos-k
содержит позицию последнего вхождения элемента k
в списке lst
.
Затем используется оператор cond
, чтобы проверить два условия:
- Если
pos-k
илиpos-d
равныnil
, то это означает, что элементd
илиk
не найден в спискеlst
. В этом случае функция возвращает перевернутый списокlst
. - Если оба
pos-k
иpos-d
не равныnil
, то это означает, что элементыd
иk
найдены в спискеlst
. В этом случае функция возвращает список, который состоит из двух частей: первая часть - это подстрока спискаlst
от начала до позицииpos-d
, а вторая часть - это подстрока спискаlst
от позицииpos-k
до конца списка. Эти две части объединяются с помощью операцииappend
. В конце кода приведены два примера вызова функцииwtf2
: * (wtf2 '(1 2 3 4 5 6 7 8 9 10) 5 10)
- функция вызывается с аргументамиlst
=(1 2 3 4 5 6 7 8 9 10)
иd
=5
,k
=10
. В этом случае функция возвращает перевернутый список(1 2 3 4 5 10)
.* (wtf2 '(1 2 3 4 5 6 7 8 9 10) 25 1)
- функция вызывается с аргументамиlst
=(1 2 3 4 5 6 7 8 9 10)
иd
=25
,k
=1
. В этом случае функция возвращает перевернутый список(10 9 8 7 6 5 4 3 2 1)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д