3

我从 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未定义。提前致谢。

4

1 回答 1

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))不浪费额外的函数调用。

于 2012-11-11T12:21:40.043 回答