我正在尝试删除给定列表中重复出现的原子。
我的代码如下 -
(defun combine (item List)
(if (member item List)
List (cons item List)))
(defuneliminateDuplicates(L)
(do
((M L) M)
((null L) M)
(setq M (combine (car L) M))
(setq L (cdr L))
))
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,它从列表中删除重复项 -
[3]> (eliminateduplicates '(a b b c a c g a))
(G C B A)
[4]> (eliminateduplicates '(a a a a a a))
(A)
[5]> (eliminateduplicates '(a b c d))
(D C B A)
Run Code Online (Sandbox Code Playgroud)
在这里,我希望结果的顺序与给定列表中的顺序相同。
即, 的结果(eliminateduplicates '(a b b c a c g a))应该是(B C G A),但不是(G C B A)
我怎样才能实现这一目标?谢谢。
我建议使用不同的方法,它更简单并且结果符合预期:
(defun eliminateDuplicates (L)
(cond ((null L) L)
((member (car L) (cdr L))
(eliminateDuplicates (cdr L)))
(t (cons (car L) (eliminateDuplicates (cdr L))))))
Run Code Online (Sandbox Code Playgroud)
例如:
(eliminateDuplicates '(a b b c a c g a))
=> (B C G A)
Run Code Online (Sandbox Code Playgroud)