创建一个多项目从一个数字使用变化类
-
22-09-2019 - |
题
我写了多项类沿线描述sic颗粒2.5.3(除了使用defclass).我想可以无缝地加和乘多项式和定期数字,但我不能让变化级接受一些.
我试图简化的问题可以通过改变类从整数浮动:
(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)
我要继续前进和实现的手工转换,但我更愿意使用内在clos设施。
作为Xach指出,我可以使用强迫或浮动,以改变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]
解决方案
你不可以利用的变化类数字。数字是不实例CLOS课程。更改类也被认为 破坏性 修改的一个实例,一个新的类,而不改变身份的原来的实例。
我会:
添加方法的改变等,不会你想要什么
或者写一功能的变化,实现各种定义胁迫的规则,并呼吁更改类的任何改变从一个CLOS流的另一个CLOS类。
其他提示
可以使用强迫或FLOAT做到这一点:
(float 4) => 4.0
(coerce 4 'float) => 4.0
不隶属于 StackOverflow