2014-09-28 2 views
0

У меня есть список:Почему функция член возвращение всухую

*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*, никогда не заканчивается.

Как это исправить?

+0

Стиль Проблема 1: никогда не добавлять в конец списка. –

+1

Проблема стиля 2: '(eq '() foo)' is '(null foo)'. Если это логическое использование '(not foo)'. –

+0

Хорошо спасибо за эти советы. Что случилось с добавлением в конец списка? – myselfesteem

ответ

Смежные вопросы