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 .... ....)))))