2016-11-05 48 views
0

我試圖編譯下面的代碼:越來越未定義的引用的函數commonLISP

(defun nextStates (st) 
    "generate all possible states" 
    (setf N 0) 
    (setf states-list (make-list 9)) 
    (setf list-actions (possible-actions)) 

    (loop for x in list-actions do 

    (setf aux (nextState st x)) 
    (when (not(member aux (states-list) :test #'equalp)) 
     (progn 
      (setf (nth N states-list) aux) 
      (setf N (+ N 1)) 
     ) 
    ) 
) 

    (values states-list) 
) 

nextState是一個功能和狀態列表是一個列表,定義這兩者。我得到「未定義的參考狀態列表」。 我不知道我在做什麼錯。 任何幫助將不勝感激

+0

難道你忘了'do'? – Sylwester

+0

@Sylwester我試過,但沒有編譯。我怎麼可以在裏面放多個語句呢? –

+0

它應該採取多種形式例如。 '(loop:for var:in list:do expr1 expr2 ...)'。如果你沒有then子句,你應該'(when(not(member ...)expr1 expr2 ...)' – Sylwester

回答

1

重命名嚴重的駱駝案件聆訊案件我留下這個。

(defun next-states (st) 
    "generate all possible states" 
    (loop :for action :in (possible-actions) 
     :for aux := (next-state st action) :then (next-state st action) 
     :when (not (member aux states-list :test #'equalp)) 
      :collect aux :into states-list 
     :finally (return states-list))) 

此處作爲一個測試是我有:

(defun possible-actions() 
    "have duplicates to see not member in action" 
    '(0 1 3 3 4)) 

(defun next-state (st action) 
    "Simple version for test" 
    (+ st action)) 

(next-states 3) ; ==> (3 4 6 7)