Слияние упорядоченных списков - 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)
Объяснение кода листинга программы
В этом коде определён вспомогательный функционал для слияния двух упорядоченных списков в один.
a-merge— это функция с двумя позиционными аргументамиwиv.- Если
w— этоnil, то возвращаетсяv. - Если
v— этоnil, то возвращаетсяw. - Если
car(w)не большеcar(v), то возвращаетсяcons(car(w))с добавлениемa-merge(cdr(w), v). - В противном случае возвращается
cons(car(v))с добавлениемa-merge(w, cdr(v)).