3

board というクラスがあるとします。

(defclass board ()
 ((blocker    :accessor blocker    :initarg :blocker    :initform  0))

この本によると、次の方法でブロッカーのカスタム setf を定義できます。

(defmethod (setf blocker) (new-blocker (b board))
  (setf (slot-value b 'blocker) new-blocker))

ただし、スチールバンクのコモンリスプは、私が評価したにもかかわらず、関数が定義されていないと言います。ここで何が悪いのか誰か知っていますか?

4

2 に答える 2

1

それは正しいようです。を指定して作成した既存の setf メソッドを再定義していることに注意してください:accessor blocker。SBCL がそれstyle-warningについて説明します。

あなたの間違いは別の場所にあります。おそらく、別のパッケージに入っていますか?これらのフォームをコンパイルしてロードするために IDE で行った手順を示し、そのメソッド呼び出しを実行してみてください。

于 2012-06-02T18:33:20.150 に答える
0

メソッドを定義する前に、ジェネリック関数を宣言する必要があります。

(defgeneric (setf blocker) (new-blocker board))

例については、Practical Common Lisp のこの章を参照してください。

于 2012-06-02T17:28:39.657 に答える