質問

書いた多項式のクラスの記述SICP2.5.3外は使用defclass).いでシームレスに追加や多多項式と定数がないでくださいクラスの受け入れます。

また簡素化の問題による変化から整数値をfloat:

(change-class 4 'float)

ものにしてくれたエラー:

There is no applicable method for the generic function
#<STANDARD-GENERIC-FUNCTION CHANGE-CLASS (7)>
when called with arguments
(4 #<BUILT-IN-CLASS FLOAT>).
[Condition of type SIMPLE-ERROR]

または、エラー状態から(ご参考):

(change-class 4 'polynomial)

私は見ていて気分が良いものをマニュアル変換が私の希望は内蔵のクロ。

としてXachポイント行使うことがで強制またはfloatに変更4に浮いてしまうからなのです。とを目的としたものより簡単な例かったのだが、これらを除去する可能性の更新-インスタンス-インの異なるクラスが間違っています。

この版のうん:

(defclass polynomial ()
 ((var :accessor var :initarg :var :initform 'x)
  (terms :accessor terms :initarg :terms :initform (make-empty-term-list))))

(defmethod update-instance-for-different-class :before ((old number) 
                        (new polynomial)
                        &key)
    (setf (slot-value new 'terms) (adjoin-term (make-term old 0)
                           (make-empty-term-list))))

(change-class 4 'polynomial)

まだまだエラのように上記の例:

There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION CHANGE-CLASS (7)>
when called with arguments
  (4 #<STANDARD-CLASS POLYNOMIAL>).
   [Condition of type SIMPLE-ERROR]
役に立ちましたか?

解決

使用できませんの変更-クラス。を参照してくださいインスタンスのクロます。変更-クラスでいただけないことも考えられる 破壊 変更のインスタンスを新しいクラスを変えずに人のアイデンティティー元のインスタンス.

私のいずれかの

  • 追加方法が変更-クラスは何をしたい

  • たは書き込み機能の変更を実装した様々なカスタム型強制規則が呼び変更-教室変更からクロクラスが別のクロクラスです。

他のヒント

あなたはそれを行うために強制またはFLOATを使用することができます:

(float 4) => 4.0
(coerce 4 'float) => 4.0
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top