问题标签 [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 回答
313 浏览

function - 扩展 defmethod 语句的 eql 子句以接受任何函数?

前几天学习了defmethod参数规范语法的eql子句。defmethod hyperspec清楚地表明,eql令牌的存在是语法的基本部分。例如,当我在 CLISP 中尝试以下操作时出现错误:

<这是一个不好的例子,因为它只适用于数字,但你希望能明白我的意思)

我很困惑(现在仍然是)为什么eql这种语法中唯一允许使用的函数,但我怀疑这是否有一个明确的答案,超出了“开发人员就是这样做的”,我不会提出这个问题的重点。

有什么办法可以解决该eql子句的这种限制并强制defmethod针对其参数测试任意函数?我正在寻找一种类似于 Haskell 中的守卫的功能,例如,上面的示例(如果有效)应该表现得像:

0 投票
1 回答
192 浏览

lisp - Lisp Def 方法结构

update上面的方法来自一本书,我想问问和之间有什么区别:before。根据我在 CLOS Lisp 中定义方法的理解,这update是方法的名称,但有什么作用:before

最后最后一行是做什么的?(format T ":BEFORE completed for agent ̃A and event ̃A ̃%" a e))

0 投票
2 回答
516 浏览

lisp - 使用不同的参数列表“重载”CLOS 多方法

我正在尝试在 Common Lisp 中对多方法进行“重载调用”。以下是案例的简化概要:

输出:i pity the foo defnoodle, who has a bar Chocolate

但是一旦我尝试定义下一个方法:

CL生气了:

有谁知道我在这里做错了什么?我知道初始化实例具有类似的灵活性,因为应该能够识别每个类和任意数量的参数的 n 个初始化实例方法。

但我不清楚如何将其转换为我上面给出的香草示例。而且我觉得我可能会叫错树,因为这是 MOP 的一部分。

0 投票
1 回答
859 浏览

lisp - 插槽定义的附加属性

http://mop.lisp.se/concepts.html说:

一个实现可以自由地向规范化插槽规范添加其他属性,前提是这些属性不是在 common-lisp-user 包中可访问的符号,也不是由 ANSI Common Lisp 标准中定义的任何包导出的符号。

例如:

但是当我尝试时:

SBCL 编译错误:

无效的初始化参数:类调用中的 MY-OPTION

[SB-PCL::INITARG-ERROR 类型的条件]

所以这个问题。如何向插槽定义添加其他属性(如“我的选项”)?

0 投票
1 回答
260 浏览

lisp - lisp clos 访问器问题

当类在列表中时,我不能使用 clos 访问器函数。

假设我有a类:

我做了两个实例:

然后如果我想创建一个函数来获取列表中每个实例的 a 值,我会这样做

并调用它

但我这样做我得到一个错误:

如果不是直接使用 mapcar 调用访问器,而是调用包含访问器的函数,也会发生这种情况。我也尝试过使用循环和其他东西而不是 mapcar。

谢谢

0 投票
1 回答
353 浏览

macros - 自定义宏中的常见 lisp defclass make-instance 用法

我定义了一个宏来创建一个新类,然后定义一个常量来创建新定义的类的一个实例:

这似乎适用于 REPL

但是在文件中编译它时不起作用:

0 投票
1 回答
123 浏览

class - List :列出包中的所有 CLOS 类

我确信可以列出一个包中定义的所有类,但我不知道该怎么做。

有人有答案吗?

谢谢,

0 投票
2 回答
849 浏览

performance - 用于性能的 defclass 类型信息

在以下程序中,删除该行

使用 SBCL 使运行时间增加了 3 倍以上。另一方面,defclass宏 via中给出的类型信息似乎对性能没有影响。:type

我怎样才能获得相同的性能优势,而不必在每次使用时都声明arr插槽 a ?simple-array bit后者特别烦人,因为(据我所知)let每次都需要通过或类似方式引入绑定;我不能只写(slot-value inst 'arr)在我需要的地方。

0 投票
2 回答
491 浏览

lisp - CLOS 插槽访问器:读但不写

我有一个 CLOS 对象的插槽名称列表:

我可以读取这些插槽的值:

==> 无

但是为什么我不能向这些插槽写入新值呢?我的 trial-data 类定义不应该为每个插槽创建一个访问器函数吗?

==>

0 投票
2 回答
863 浏览

lisp - 为什么 CLOS slot 可以解绑?

据说,只有 Common Lisp 中的特殊变量才能解绑。对于所有词法变量,默认值为nil. 我认为类插槽存在于闭包之类的东西中,但显然它们不存在。

如果我定义了一个不带:initform参数的 CLOS 插槽(希望它们nil无论如何都会被绑定)并且在创建实例时不提供值,我将得到一个带有未绑定插槽的实例。为什么会这样?它不方便。