List Lisp递归合并升序排序?

List Lisp递归合并升序排序?,list,syntax,lisp,common-lisp,mergesort,List,Syntax,Lisp,Common Lisp,Mergesort,我目前正试图编写一个程序,它接受两个假定已按升序排列的数字列表,并对它们进行递归合并排序 到目前为止,我已经: (defun MERGESORT (NLIST1 NLIST2) (cond ((null NLIST1)NLIST2) ((null NLIST2)NLIST1) ((<= (car NLIST1) (car NLIST2)) (cons(car NLIST1)(car Nlist2)) (MERGESORT(cdr NLIST1)(cdr NLIST2))) (t(cons(

我目前正试图编写一个程序,它接受两个假定已按升序排列的数字列表,并对它们进行递归合并排序

到目前为止,我已经:

(defun MERGESORT (NLIST1 NLIST2)
(cond ((null NLIST1)NLIST2)
((null NLIST2)NLIST1)
((<= (car NLIST1) (car NLIST2)) (cons(car NLIST1)(car Nlist2))
(MERGESORT(cdr NLIST1)(cdr NLIST2)))
(t(cons(car NLIST2)(car NLIST1))
(MERGESORT (cdr NLIST1)(cdr NLIST2)))))
我似乎只输出了a(6 9)

我想得到(1122344679)


我可能有点想得太多了,我知道这只是比较前两个元素的问题,先输出两个元素中较小的元素,然后递归,但现在我遇到了一个障碍。你们怎么做这个程序?

首先,这是
merge
,不是
mergesort
-参数已经排序了

你的代码真的不可读。有一些缩进,它是

(defun MERGE (NLIST1 NLIST2)
  (cond 
   ((null NLIST1) NLIST2)
   ((null NLIST2) NLIST1)
   ((<= (car NLIST1) (car NLIST2)) 
    (cons (car NLIST1) (car Nlist2))      ; ?? no effect
    (MERGE (cdr NLIST1) (cdr NLIST2)))   
   (t
    (cons (car NLIST2) (car NLIST1))      ; ?? no effect
    (MERGE (cdr NLIST1) (cdr NLIST2))))) 
(取消合并(NLIST1 NLIST2)
(续)
((空NLIST1)NLIST2)
((空NLIST2)NLIST1)

(首先,这是
merge
,而不是
mergesort
——参数已排序

你的代码真的不可读。加上一些缩进,它就不可读了

(defun MERGE (NLIST1 NLIST2)
  (cond 
   ((null NLIST1) NLIST2)
   ((null NLIST2) NLIST1)
   ((<= (car NLIST1) (car NLIST2)) 
    (cons (car NLIST1) (car Nlist2))      ; ?? no effect
    (MERGE (cdr NLIST1) (cdr NLIST2)))   
   (t
    (cons (car NLIST2) (car NLIST1))      ; ?? no effect
    (MERGE (cdr NLIST1) (cdr NLIST2))))) 
(取消合并(NLIST1 NLIST2)
(续)
((空NLIST1)NLIST2)
((空NLIST2)NLIST1)
((
(defun MERGE (NLIST1 NLIST2)
  (cond 
   ((null NLIST1) NLIST2)
   ((null NLIST2) NLIST1)
   ((<= (car NLIST1) (car NLIST2)) 
    (cons (car NLIST1) 
          (MERGE .... ....)))
   (t
    (cons (car NLIST2)
          (MERGE .... ....)))))