Lisp中的嵌套结构

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

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)) 以避免额外的函数调用。


2
正确答案是:(defun caballo-casilla-j (estado) (casilla-j (tablero-caballo estado))) - omniyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接