在LISP中递归比较两个列表

时间:2014-11-03 09:09:02

标签: common-lisp

我目前正在尝试创建一个函数,该函数比较按优先级排序的两个列表的内容,并创建一个列表,该列表也按优先级排序。

例如(4 6 8 9 10)(1 2 5 7 9)将成为(1 2 4 5 6 7 8 9 9 10)

当我们正在处理递归时,我希望这必须以递归方式完成。我对LISP的了解有限,我正在努力解决这个问题。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:2)

您不需要自己实施。 Common Lisp具有函数merge

CL-USER> (merge 'list '(4 6 8 9 10) '(1 2 5 7 9) '<)
(1 2 4 5 6 7 8 9 9 10)

答案 1 :(得分:1)

这称为合并

您可以通过始终查看每个列表的第一个元素并使用较低的列表来构建新列表。

答案 2 :(得分:1)

如果你想递归地做,那么你可以

(defun merge1 (ls1 ls2)
  (cond ((null ls1) ls2)
        ((null ls2) ls1)
        ((< (car ls1) (car ls2))
         (cons (car ls1)
               (merge1 (cdr ls1) ls2)))
        (t (cons (car ls2)
                 (merge1 ls1 (cdr ls2))))))