Вставить элемент в отсортированный список с сохранением порядка - Lisp

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

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

Получить новый отсортированный список путем вставки заданного элемента в исходный отсортированный в порядке возрастания элементов список.

Решение задачи: «Вставить элемент в отсортированный список с сохранением порядка»

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

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


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

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

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