问题标签 [clos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3078 浏览

lisp - Common Lisp 未绑定变量

是否可以使用未初始化的变量作为函数参数?对于一个作业,我必须使用 CLOS 编写一个语义网络系统,我的教授包含了一个测试函数来测试我们的输出,其中一个指定:

(print (def-concept Human)),

这意味着将参数 Human 传递给函数 def-concept。运行此测试功能时,我无法摆脱错误(在 Allegro CL 中):

Error: Attempt to take the value of the unbound variable人类'。

由于这是测试中的第一个函数,因此在此之前没有初始化任何变量。有没有办法绕过将未初始化的变量作为函数的参数传递?

提前致谢。

0 投票
1 回答
111 浏览

lisp - clisp,CLOS:稍后重新键入对象

假设我有一个类animal,有子类horseduckrabbit。假设我make-instance用来制作 class 的几个对象animal。很久以后,我发现,对于这些对象中的每一个,它实际上是 ahorse或 aduck或 a rabbit。有没有办法重新输入这些对象?简单地创建适当子类型的新对象并复制所有插槽中的数据会很笨拙,因为此时这样的对象已经在其他对象的插槽中的列表中表示,我不得不去通过这些列表并用新对象替换旧对象。

保留相同的旧对象并对它们进行子分类。我可以这样做吗?

0 投票
2 回答
141 浏览

common-lisp - 在 CLOS 方法定义中,specializer 可以是类列表而不是单个类吗?

虽然它在一般情况下没有多大意义,因为它应该通过超类完成,但我想允许特定参数为“nil”并避免必须定义一个单独的方法。

我正在尝试做类似的事情(伪代码)

0 投票
4 回答
3054 浏览

object - 是否有克隆 CLOS 对象的通用方法?

我正在寻找一种以浅层方式克隆 CLOS 对象的方法,因此创建的对象将是相同类型,每个插槽中的值相同,但是是一个新实例。我发现最接近的是标准函数复制结构,它对结构执行此操作。

0 投票
1 回答
1348 浏览

lisp - 如何从 Lisp 类中导出插槽和访问器?

这是我班的包:

我可以创建一个barin package的实例cl-user

但我无法访问该成员baz。这么叫slot-value……

...导致此错误消息:

我已经尝试添加baz:export列表中,但这也不起作用。

如何从包中导出插槽和访问器?

0 投票
3 回答
2605 浏览

memory-management - common lisp 中对象的内存使用情况

有没有办法找出一个类或基本数据类型的实例使用了多少内存?

我在 cl 中有一个玩具网络框架,它使用代表 html 标签及其属性的类实例创建和管理网页,并且由于它们应该创建一个 html 页面,因此它们在一个名为 children 的插槽中有子节点。所以我在想如果我采用这种方法,用户的会话将花费多少服务器。谢谢。

0 投票
2 回答
1339 浏览

lisp - CLOS:如何使插槽具有强制类型的符号向量?

我正在尝试创建一个可以在 SBCL 的插槽中存储符号向量的类。我无法弄清楚如何设置它。

到目前为止,我最好的猜测是

这将返回以下错误:

一些实验表明,将类型更改为仅symbol返回相同的错误。我认为这symbol是 Common Lisp 中的有效类型......我错了吗?

我怎样才能让它工作?

[编辑]

我遇到的上述问题是在 Emacs 24.2 下的 09-22-2012 Slime 版本中运行 SBCL 1.0.58。当我从命令行运行 SBCL 1.0.58 时,没有问题。这似乎不是 SBCL 问题...

0 投票
1 回答
158 浏览

garbage-collection - CLOS 中的瞬态类

是否有任何标准方法可以在 CLOS 中创建瞬态类;也就是说,一个在所有实例都死了之后可以被 GC 的类?

在 SBCL 中,我尝试(setf test (defclass #:foo () ()))了,即在假设它通常只是导致该类被 GC 保留的类的名称的情况下使用 uninterned 符号,但在该类上安装 SBCL 终结函数,然后设置符号值从 TEST 到 NIL 表明,无论我运行多少次,该类都不会被 GC (gc :full t)。这让我想知道这是否可能,如果可能,如何。

0 投票
3 回答
719 浏览

lisp - Common Lisp 中标准对象和标准类的层次结构

我正在学习 Common Lisp(使用 Lispworks),我现在正试图进入课堂系统。有一个称为标准对象的类,它被定义为

standard-objectstandard-class的实例,并且是除自身之外的所有作为standard-class实例的类的超类。

(取自http://www.lispworks.com/documentation/HyperSpec/Body/t_std_ob.htm#standard-object)所以它是标准类的一个实例

另一方面,标准类标准对象的子类

标准对象如何既是标准类的超类又是它的实例?如果我们将标准类定义为子类型,我们应该在定义它的超类型(例如标准对象)之后定义它,那么超类怎么会成为实例呢?还是我的逻辑错了?

0 投票
3 回答
807 浏览

macros - Common Lisp:控制宏扩展时间

我正在使用 common lisp,发现自己经常输入以下形式的插槽定义:

所以我想编造一个宏来加速这个。我想出了以下内容:

毫无疑问,这是一个肮脏的黑客,但很实用。或者我是这么想的。当我试图运行我的代码时,我遇到了一个障碍:因为 defclass 是一个宏,所以传递给它的参数是未经评估的。这意味着,而不是看到

它看到

当然,这表明一个错误。

在我看来,答案是以某种方式控制宏扩展的顺序,以确保在 defclass 之前扩展快速槽。这让我想到了我的问题:如何做到这一点?或者,如果您对我最初的难题有不同的解决方案,那也不会不受欢迎。