8得票2回答
从通用函数中删除一个方法

我已经向通用函数 speak 添加了以下方法,但现在想在REPL中删除这个特定的方法,而不影响通用函数的其他方法。 (defmethod speak :around ((c courtier) string) ; [1] (format t "Does the Kin...

8得票2回答
何时使用initform?

我正在组建一个分子动力学相关工作的班级,具体如下: (defclass %atom (particle) ((name :initarg :name :initform (error "Every atom in the system must have a name!")) (m...

7得票3回答
将CLOS类实例用作哈希表键?

我有以下的类: (defclass category () ((cat-channel-name :accessor cat-channel-name :initarg :cat-channel-name :initform "" :type string :docu...

7得票2回答
在defgeneric中使用:method选项

我注意到,在阅读Keene的书时,defgeneric有一个:method选项,似乎允许您在通用定义本身中指定方法。我看到的大多数文档都将适用的方法定义在单独的defmethod中。通常很清晰的hyperspec将:method列为defgeneric的选项,但没有说明其含义。 :metho...

8得票4回答
有没有一种通用的方法可以克隆CLOS对象?

我正在寻找一种以浅层方式克隆CLOS对象的方法,使创建的对象将具有相同类型和每个插槽中相同的值,但是是一个新实例。我发现最接近的东西是标准函数copy-structure,它可以用于结构体进行此操作。

8得票3回答
Common Lisp中对象的内存使用情况

有没有办法找出类的实例或基本数据类型在一般情况下使用了多少内存? 我在Cl中编写了一个玩具web框架,它通过代表html标记及其属性的类的实例创建和管理网页,并且由于它们应该生成一个html页面,因此它们在称为children的插槽中有子级。所以我在思考,如果我采取这种方法,用户会话将花费服...

12得票1回答
有没有一种方法可以获取一个类的槽位?

我有一个像这样的类(defclass shape () ((color :initform :black) (thickness :initform 1) (filledp :initform nil) (window :initform nil))) 如果我只知道这个类的实例,是否有...

11得票3回答
如何取消一个已经定义好的方法?

在开发过程中,我定义了一个“initialize-instance :after”方法,但后来不再需要它,实际上它妨碍了我的工作,因为里面调用的代码已经无效了。由于unintern函数没有限定符参数,有没有办法“取消国际标准化组织”方法的符号限定符组合,这样我就不必重新启动lisp和从头开始加...

16得票3回答
Lisp:如何覆盖CLOS类的默认字符串表示?

在Common Lisp中,我该如何覆盖CLOS类的默认字符串表示,以便调用format或princ时打印出可理解的内容,即使该类的对象嵌入其他类型(如列表或数组)中也是如此? 例如,如果我在x保存一个解决方案类的实例时调用(format t "~a~%" x),我希望它打印出类似于#而不是...

12得票1回答
如何更改类的元类

这种情况屡屡发生在我身上:我定义一个类,然后忘记把它设置成可调用的,或者它是一个 Gtk 组件类,因此需要声明它的元类。然而,一旦定义了元类,SBCL 就不允许我更改它(即使没有这个类的实例)。例如,执行以下代码:(defclass foo () ((slot-a))) 然后添加一个元类并...