【发布时间】:2016-04-08 10:52:00
【问题描述】:
我想用 Common Lisp 合并和排序两个排序的关联列表。 我做了代码。但结果和我想的不一样。
(defun MERGEALIST (K L)
(cond ((and (eq nil K) (eq nil L)) nil)
((eq nil K) L)
((eq nil L) K)
((<= (car (car K)) (car (car L)))
(cons K (MERGEALIST (cdr K) L)))
((> (car (car K)) (car (car L)))
(cons L (MERGEALIST K (cdr L))))))
函数的输入K 和L 是排序的关联列表。
例如,
K 是((1 . a) (3 . c) (5 . e))
L 是((2 . b) (4 . d))。
我预计结果是((1 . a) (2 . b) (3 . c) (4 . d) (5 . e))。
但结果完全不同。 为什么会出现这个结果? 谢谢。
【问题讨论】:
-
尝试将最后两种情况下的
(cons k ...)和(cons l ...)更改为(cons (car k) ...)和(cons (car l) ...)。 -
我很确定您在之前的问题中得到了答案:stackoverflow.com/q/36457071/1281433。您在此处接受的答案(使用标准函数 merge)在an answer 中进行了描述(免责声明,这是我的答案)。
-
@JoshuaTaylor:MERGE 的答案只是补充。我在第一部分专门用他的代码回答了他的问题。我认为他的问题不是关于哪个现有函数解决了它,而是他如何让代码工作......
标签: lisp common-lisp