问题标签 [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.
function - 扩展 defmethod 语句的 eql 子句以接受任何函数?
前几天学习了defmethod
参数规范语法的eql子句。defmethod hyperspec清楚地表明,eql
令牌的存在是语法的基本部分。例如,当我在 CLISP 中尝试以下操作时出现错误:
(<
这是一个不好的例子,因为它只适用于数字,但你希望能明白我的意思)
我很困惑(现在仍然是)为什么eql
这种语法中唯一允许使用的函数,但我怀疑这是否有一个明确的答案,超出了“开发人员就是这样做的”,我不会提出这个问题的重点。
有什么办法可以解决该eql
子句的这种限制并强制defmethod
针对其参数测试任意函数?我正在寻找一种类似于 Haskell 中的守卫的功能,例如,上面的示例(如果有效)应该表现得像:
lisp - Lisp Def 方法结构
update
上面的方法来自一本书,我想问问和之间有什么区别:before
。根据我在 CLOS Lisp 中定义方法的理解,这update
是方法的名称,但有什么作用:before
?
最后最后一行是做什么的?(format T ":BEFORE completed for agent ̃A and event ̃A ̃%" a e))
lisp - 使用不同的参数列表“重载”CLOS 多方法
我正在尝试在 Common Lisp 中对多方法进行“重载调用”。以下是案例的简化概要:
输出:i pity the foo defnoodle, who has a bar Chocolate
但是一旦我尝试定义下一个方法:
CL生气了:
有谁知道我在这里做错了什么?我知道初始化实例具有类似的灵活性,因为应该能够识别每个类和任意数量的参数的 n 个初始化实例方法。
但我不清楚如何将其转换为我上面给出的香草示例。而且我觉得我可能会叫错树,因为这是 MOP 的一部分。
lisp - 插槽定义的附加属性
http://mop.lisp.se/concepts.html说:
一个实现可以自由地向规范化插槽规范添加其他属性,前提是这些属性不是在 common-lisp-user 包中可访问的符号,也不是由 ANSI Common Lisp 标准中定义的任何包导出的符号。
例如:
但是当我尝试时:
SBCL 编译错误:
无效的初始化参数:类调用中的 MY-OPTION
[SB-PCL::INITARG-ERROR 类型的条件]
所以这个问题。如何向插槽定义添加其他属性(如“我的选项”)?
lisp - lisp clos 访问器问题
当类在列表中时,我不能使用 clos 访问器函数。
假设我有a类:
我做了两个实例:
然后如果我想创建一个函数来获取列表中每个实例的 a 值,我会这样做
并调用它
但我这样做我得到一个错误:
如果不是直接使用 mapcar 调用访问器,而是调用包含访问器的函数,也会发生这种情况。我也尝试过使用循环和其他东西而不是 mapcar。
谢谢
macros - 自定义宏中的常见 lisp defclass make-instance 用法
我定义了一个宏来创建一个新类,然后定义一个常量来创建新定义的类的一个实例:
这似乎适用于 REPL
但是在文件中编译它时不起作用:
class - List :列出包中的所有 CLOS 类
我确信可以列出一个包中定义的所有类,但我不知道该怎么做。
有人有答案吗?
谢谢,
performance - 用于性能的 defclass 类型信息
在以下程序中,删除该行
使用 SBCL 使运行时间增加了 3 倍以上。另一方面,defclass
宏 via中给出的类型信息似乎对性能没有影响。:type
我怎样才能获得相同的性能优势,而不必在每次使用时都声明arr
插槽 a ?simple-array bit
后者特别烦人,因为(据我所知)let
每次都需要通过或类似方式引入绑定;我不能只写(slot-value inst 'arr)
在我需要的地方。
lisp - CLOS 插槽访问器:读但不写
我有一个 CLOS 对象的插槽名称列表:
我可以读取这些插槽的值:
==> 无
但是为什么我不能向这些插槽写入新值呢?我的 trial-data 类定义不应该为每个插槽创建一个访问器函数吗?
==>
lisp - 为什么 CLOS slot 可以解绑?
据说,只有 Common Lisp 中的特殊变量才能解绑。对于所有词法变量,默认值为nil
. 我认为类插槽存在于闭包之类的东西中,但显然它们不存在。
如果我定义了一个不带:initform
参数的 CLOS 插槽(希望它们nil
无论如何都会被绑定)并且在创建实例时不提供值,我将得到一个带有未绑定插槽的实例。为什么会这样?它不方便。