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
检查列表中是否有项目<代码>成员不检查项目是否在子列表中。