2012-11-11 129 views
3

我從Lisp開始,我需要知道是否可以使用嵌套結構。這裏是我的嘗試:Lisp中的嵌套結構

(defstruct casilla i j) 
(defstruct tablero caballo reina t1 t2) 

(defparameter *estado-inicial* 
    (make-tablero :caballo (make-casilla :i 1 :j 1) 
       :reina (make-casilla :i 5 :j 4) 
       :t1  (make-casilla :i 3 :j 5) 
       :t2  (make-casilla :i 4 :j 5))) 

而且如果我要訪問現場i

(defun es-estado-final (estado) 
    (and (= (caballo-casilla-i estado) 3) 
     (= (caballo-casilla-j estado) 1))) 

是嗎?這似乎不是因爲caballo-casilla-i未定義。 在此先感謝。

回答

5

對於您的Lisp環境爲您創建的結構自動訪問器tablero-caballocasilla-i。要組合它們,您需要使用(casilla-i (tablero-caballo estado))。很明顯,你可以推出自己的存取功能:

(defun caballo-casilla-i (estado) 
    (casilla-i (tablero-caballo estado))) 

您也可以(declaim (inline caballo-casilla-i))不浪費額外的函數調用。

+2

正確答案是: '(defun caballo-casilla-j(estado) (casilla-j(tablero-caballo estado)))'' – omniyo