Вставить элемент в отсортированный список с сохранением порядка - 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), который и возвращается в качестве результата.