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-caballoとを作成しますcasilla-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 に答える