Слияние упорядоченных списков - Lisp

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

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

Даны два упорядоченных по возрастанию числовых списка. Объединить их с сохранением упорядоченности. Пример: (1 2 5 6 11) и (-1 0 3 4 7 15) должны дать (-1 0 1 2 3 4 5 6 7 11 15)

Решение задачи: «Слияние упорядоченных списков»

textual
Листинг программы
(defun a-merge (w v)
  (cond ((null w) v) ((null v) w)
        ((<= (car w) (car v)) (cons (car w) 
                             (a-merge (cdr w) v)))
        ((cons (car v) (a-merge w (cdr v))))))
 
> (a-merge '(1 4 5 6 12) '(2 3 4 5))
(1 2 3 4 4 5 5 6 12)

Объяснение кода листинга программы

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

  1. a-merge — это функция с двумя позиционными аргументами w и v.
  2. Если w — это nil, то возвращается v.
  3. Если v — это nil, то возвращается w.
  4. Если car(w) не больше car(v), то возвращается cons(car(w)) с добавлением a-merge(cdr(w), v).
  5. В противном случае возвращается cons(car(v)) с добавлением a-merge(w, cdr(v)).

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


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

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

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