Вставить элемент в отсортированный список с сохранением порядка - Lisp
Формулировка задачи:
Решение задачи: «Вставить элемент в отсортированный список с сохранением порядка»
(defun plunge-in (n w) (when w (let ((a (car w)) (d (cdr w))) (cond ((atom d) (list a n)) ((> n a) (cons a (plunge-in n d))) ((cons n w)))))) > (plunge-in 7 '(1 3 5 8 11)) (1 3 5 7 8 11)
Объяснение кода листинга программы
В данном коде представлена функция plunge-in
, которая принимает два аргумента: n
и w
. Если w
не равно nil
, то из него сначала извлекаются первый и второй элементы, которые сохраняются в переменных a
и d
соответственно. Затем выполняется проверка: если d
является атомом (то есть является одиночным элементом), то возвращается список, содержащий только a
и n
. Если n
больше a
, то рекурсивно вызывается функция plunge-in
с аргументами n
и d
, и результатом этой функции заменяется a
. Если n
меньше или равно a
, то возвращается исходный список w
.
При вызове функции plunge-in
с аргументами 7
и (1 3 5 8 11)
, сначала извлекаются a
и d
(соответственно 5
и (8 11)
. Поскольку d
не является атомом, вызывается рекурсивная функция plunge-in
с аргументами 7
и (8 11)
. В результате этого вызова получается список (1 3 5 7 8 11)
, который и возвращается в качестве результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д