Lisp 为什么成员函数返回nil

Lisp 为什么成员函数返回nil,lisp,Lisp,我有一份清单: *DSTATES* = ( ( list1 ) ( list2 ) ( list3 ) ... ( listn ) ) 以及州名称列表,x=(list) *DSTATES*有((零)(三二一)(二)(三零)) x有(两个) 这是我的密码: (map '() #'(lambda (x) (princ "Looking at transition ") (princ x) (princ #\newline) (if

我有一份清单:

*DSTATES* = ( ( list1 ) ( list2 ) ( list3 ) ... ( listn )  )
以及州名称列表,
x=(list)

*DSTATES*
((零)(三二一)(二)(三零))

x有
(两个)

这是我的密码:

(map '() #'(lambda (x)
           (princ "Looking at transition ") (princ x)
           (princ #\newline)
           (if (and (eq '() (member x *DSTATES*)) (not (eq '() x)))
               (progn
                 (princ x) (princ " is not a member of *DSTATES*")
                 (princ #\newline)
                 (setq *DSTATES* (append *DSTATES* (list x)))))
           (princ "Intermediate *DSTATES* ") (princ *DSTATES*)
           (princ #\newline) (princ #\newline))
       trans)
当我执行
(eq'()(成员x*DSTATES*)
时,据我所知,它总是返回true。正因为如此,
*DSTATES*
变得越来越大,我的循环在
*DSTATES*
大小上有一个停止条件,它永远不会终止

如何解决此问题?

只需执行
(成员x*DSTATES*:test#“tree-equal)

这将使
成为成员
检查成员资格

希望这对大家有帮助


样式问题1:永远不要附加到列表的末尾。样式问题2:
(eq'()foo)
(null foo)
。如果是布尔值,请使用
(不是foo)
。好的,谢谢你的提示。添加到列表末尾有什么问题?问题4:
*states*
是一个列表列表
member
将找不到任何内容,因为它不查看子列表。
member
检查列表中是否有项目<代码>成员不检查项目是否在子列表中。