У меня есть список:Почему функция член возвращение всухую
*DSTATES* = ((list1) (list2) (list3) ... (listn) )
и список названий государств, x = (list)
*DSTATES*
имеет ((zero) (three two one) (two) (three zero))
х имеет (two)
.
Вот мой код:
(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 '() (member x *DSTATES*))
всегда - насколько я могу сказать, - возвращает истину. Из-за этого *DSTATES*
становится все больше и больше, и мой цикл, который имеет условие останова на размере *DSTATES*
, никогда не заканчивается.
Как это исправить?
Стиль Проблема 1: никогда не добавлять в конец списка. –
Проблема стиля 2: '(eq '() foo)' is '(null foo)'. Если это логическое использование '(not foo)'. –
Хорошо спасибо за эти советы. Что случилось с добавлением в конец списка? – myselfesteem