比较lisp中的两个符号列表

pro*_*eek 1 lisp comparison common-lisp

假设我有两个相同但不同顺序的lisp列表:'(A B C)和' (C B A).如何检查它们是否相同(在元素相同的意义上)?

CL-USER> (equal '(a b c) '(c b a))
NIL
Run Code Online (Sandbox Code Playgroud)

GoZ*_*ner 7

像这样:

  (not (set-exclusive-or '(a b c) '(c b a)))
Run Code Online (Sandbox Code Playgroud)

T如果两组相等则返回,否则返回NIL.

[编辑]如果他们不是真正的集合,那么你可以使用这个:

  (not (set-exclusive-or 
         (remove-duplicates '(a b c))
         (remove-duplicates '(c b a))))
Run Code Online (Sandbox Code Playgroud)

  • 适用于'集',但不适用于一般的列表.`(不是(set-exclusive-or'(abc)'(cbaa)))`` - >``t`也许这就是需要的东西,也许不是. (2认同)