【发布时间】:2012-10-11 20:15:31
【问题描述】:
需要在 lisp 中编写一个联合函数,它接受两个列表作为参数并返回一个列表,该列表是两个列表的并集,没有重复。顺序要与输入列表一致
例如:如果输入是 '(a b c) 和 '(e c d),结果应该是 '(a b c e d)
这是我目前所拥有的
(defun stable-union (x y)
(cond
((null x) y)
((null y) x))
(do ((i y (cdr i))
(lst3 x (append lst3
(cond
((listp i)
((null (member (car i) lst3)) (cons (car i) nil) nil))
(t (null (member i lst3)) (cons i nil) nil)))))
((null (cdr i)) lst3)))
我的错误是段(null(member(car i)lst3))存在“非法函数对象”
建议?
【问题讨论】:
-
是的,他忽略了大部分内容。
stable-union是一个 Xemacs 库函数,所以你可以查一下。它使原始列表完全不变,并且不需要任何一个列表都是唯一的,只需从第二个列表中删除第一个列表的任何成员并保留两者的顺序即可。其中一部分隐含在他给出的部分规范中,其余部分在代码中(即使它有点损坏)。 -
你说得对,哈希表提供了最快的解决方案,不过 :)
标签: lisp