Lisp &引用;“成员”;韩元';我不认识名单上的成员

Lisp &引用;“成员”;韩元';我不认识名单上的成员,lisp,common-lisp,clisp,Lisp,Common Lisp,Clisp,我遇到了一个非常奇怪的问题。我有一个名为“定理”的列表,其中正好有一项。以下是证据: []> theorems (((ROSES ARE RED) ^ (~ (ROSES ARE RED)))) []> (car theorems) ((ROSES ARE RED) ^ (~ (ROSES ARE RED))) 显然((玫瑰是红色的)^(~(玫瑰是红色的))是“定理”列表中的一员。但当我测试它的成员资格时,它失败了: []> (member '((ROSES ARE RED)

我遇到了一个非常奇怪的问题。我有一个名为“定理”的列表,其中正好有一项。以下是证据:

[]> theorems
(((ROSES ARE RED) ^ (~ (ROSES ARE RED))))
[]> (car theorems)
((ROSES ARE RED) ^ (~ (ROSES ARE RED)))
显然((玫瑰是红色的)^(~(玫瑰是红色的))是“定理”列表中的一员。但当我测试它的成员资格时,它失败了:

[]> (member '((ROSES ARE RED) ^ (~ (ROSES ARE RED))) theorems)
NIL
但如果我明确地称之为,它是有效的:

[]> (member (car theorems) theorems)
(((ROSES ARE RED) ^ (~ (ROSES ARE RED))))

为什么会发生这种情况,我如何修复它?

Common Lisp使用
EQL
作为默认测试函数<代码>EQL检查项目是否相同。您想测试这些项是否具有相同的结构。因此,您需要使用
EQUAL
EQUALP

CL-USER 11 > (setf theorems '(((ROSES ARE RED) ^ (~ (ROSES ARE RED)))))
(((ROSES ARE RED) ^ (~ (ROSES ARE RED))))

CL-USER 12 > (member '((ROSES ARE RED) ^ (~ (ROSES ARE RED))) theorems)
NIL
告诉
成员使用
EQUAL

CL-USER 13 > (member '((ROSES ARE RED) ^ (~ (ROSES ARE RED)))
                     theorems
                     :test 'equal)
(((ROSES ARE RED) ^ (~ (ROSES ARE RED))))

Common Lisp使用
EQL
作为默认测试函数<代码>EQL
检查项目是否相同。您想测试这些项是否具有相同的结构。因此,您需要使用
EQUAL
EQUALP

CL-USER 11 > (setf theorems '(((ROSES ARE RED) ^ (~ (ROSES ARE RED)))))
(((ROSES ARE RED) ^ (~ (ROSES ARE RED))))

CL-USER 12 > (member '((ROSES ARE RED) ^ (~ (ROSES ARE RED))) theorems)
NIL
告诉
成员使用
EQUAL

CL-USER 13 > (member '((ROSES ARE RED) ^ (~ (ROSES ARE RED)))
                     theorems
                     :test 'equal)
(((ROSES ARE RED) ^ (~ (ROSES ARE RED))))