omn*_*iyo 3 lisp struct field nested common-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)))
Run Code Online (Sandbox Code Playgroud)
如果我必须访问该字段i:
(defun es-estado-final (estado)
(and (= (caballo-casilla-i estado) 3)
(= (caballo-casilla-j estado) 1)))
Run Code Online (Sandbox Code Playgroud)
是对的吗?似乎不是因为caballo-casilla-i未定义.提前致谢.
对于结构,您的Lisp环境会自动为您创建访问器tablero-caballo和casilla-i.要结合它们,您需要使用(casilla-i (tablero-caballo estado)).显然,您可以推出自己的访问器功能:
(defun caballo-casilla-i (estado)
(casilla-i (tablero-caballo estado)))
Run Code Online (Sandbox Code Playgroud)
您也可以(declaim (inline caballo-casilla-i))不浪费额外的函数调用.