我目前正在尝试编写一个程序,该程序将两个数字列表假定为已按升序排列并以递归方式合并它们。
到目前为止,我有:
(defun MERGESORT(NLIST1 NLIST2)(条件 …
首先,这是 merge 不是 mergesort - 参数已经排序。
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)))))
如您所见,您的括号是错误的。始终使用缩进,以更好地查看代码的结构。
相反,应该是什么
(defun MERGE (NLIST1 NLIST2) (cond ((null NLIST1) NLIST2) ((null NLIST2) NLIST1) ((<= (car NLIST1) (car NLIST2)) (cons (car NLIST1) (MERGE .... ....))) (t (cons (car NLIST2) (MERGE .... ....)))))