clos相关内容

重新定义打印对象方法以简化操作在不同的CL实现中具有不同的效果

尝试以标准列表表示法打印conses,但始终以点对的形式打印,以最小的努力,我以这种方式重新定义了 print-object 方法: (defmethod print-object((c cons)str)(格式str“(〜a.〜a)"(car c)(cdr c))) 但效果因不同的实现而异. 在Clozure CL和LispWorks Personal中,结果是我所期望的: CL ..
发布时间:2021-04-23 19:42:05 其他开发

LISP:从类实例获取所有插槽名称

我需要使用类的属性(其插槽值)创建一个窗口。 这就像 describe 函数。 我的问题是:如何获取该类的所有插槽名称? 我什么都找不到,只有 describe 函数。 解决方案 怎么样 (mapcar#'slot -definition-name(class-slots class)) ..
发布时间:2020-10-06 06:44:34 其他开发

MOP:可以定义任何插槽吗? (mito的col-type)

我定义了一个使用Mito ORM的类,插槽定义了:col-type : (isbn :accessor isbn :initarg:isbn :col-type(or(:varchar 128):null)) 如何获取:col-type 的定义?由于这是我的类定义中的插槽,因此没有通用的访问方式,例如 slot-definition:col-type ... 吗? ..
发布时间:2020-10-06 06:37:05 其他开发

使用CLOS类实例作为哈希表键?

我有以下课程: (defclass category() ((cat-channel-name :访问者cat-channel-name:initarg:cat-channel-name:initform“”:类型字符串 :documentation“该类别的频道名称”) (cat-min :访问者cat-min:initarg:min:initform 0:类型编号 :文档“类别的最小 ..
发布时间:2020-10-06 06:22:45 其他开发

通用Lisp类层次结构

Greg Pfeil的类层次结构图提供了通用的全面图Lisp类型系统。但是,我试图更好地理解层次结构顶部的类关系。举一个简单的例子,让(破坏人的名字年龄),然后让(defparameter * p1 *(make-person:name“ Yosh”:age 19)。现在 (typep * p1 *'person) T (typep * p1 *'结构) T (typep * p1 ..
发布时间:2020-10-06 06:21:31 其他开发

有没有办法从所有继承树中收集插槽定义读取器?

通用函数 slot-definition-readers 获取一个参数,该参数必须为 direct-slot-definition 。如果一个对象是从另一个类继承的一个类的实例,我如何掌握该对象所有有效插槽的读取器?我是否必须遍历树并根据 class-direct-slots 的结果调用 slot-definition-readers 解决方案 此“社区Wiki”答案是在此处提供此功能的实 ..
发布时间:2020-10-06 06:13:09 其他开发

保存CLOS对象

将任何Common Lisp结构对象保存到文件(可读)似乎相对简单, (defun save-structure -object(对象文件名) (带有打开文件(流文件名:direction:输出 :if-exists:supersede) (带有标准io语法(打印对象流)))) 对于CLOS对象实例,该帖子位于使clos对象可打印成Lisp模式表示更复杂的配方。 首 ..
发布时间:2020-10-06 06:12:07 其他开发

有克隆CLOS对象的通用方法吗?

我正在寻找一种浅层克隆CLOS对象的方法,因此创建的对象将是同一类型,每个插槽中的值相同,但是是一个新实例。我发现最接近的是标准函数copy-structure,它对结构执行此操作。 解决方案 没有标准的预定义方法可以通常复制CLOS对象。如果有可能,提供合理的默认复制操作并不是一件容易的事,因为它的正确语义在不同的类之间以及在不同的应用程序之间变化,因此至少在大多数情况下大部分时间都对任 ..
发布时间:2020-10-02 22:21:21 其他开发

用通用函数代替普通函数

我想使用诸如elt,nth和mapcar之类的名称与我正在开发原型的新数据结构一起使用,但是这些名称指定了普通函数,因此,我认为需要将其重新定义为泛型函数. 重新定义这些名称大概是不好的形式吗? 有没有办法告诉defgeneric不要产生程序错误并继续进行功能绑定的替换? 这些不是通用函数还是历史悠久,是否有充分的理由? 请问这里有什么公认的智慧和最佳实践? 解决方案 ..
发布时间:2020-07-23 01:45:46 其他开发

lisp,CLOS:在流程类中添加一个插槽

我的程序在多线程处理中出错,因此我想扩展with-lock-grabbed宏以跟踪进程获取的锁堆栈.我想通过简单地添加一个插槽来存储锁栈来做到这一点. 不幸的是,我不明白如何在运行时添加插槽而不破坏已经存在的插槽.确保类完全重新定义了类.我不想要这个,因为我不知道其他插槽进程已经拥有了. 如何添加插槽? 特别是,我想添加以下两个插槽: (lock-stack :docum ..
发布时间:2020-07-07 04:59:45 其他开发

常见口臭类型的综合指南

也许这个问题太笼统了,不过我会尝试: 是否有关于通用Lisp类型的全面指南? 我对此主题感到困惑: 为什么在make-array的:element-type中声明的非原始类型被提升为t?是否有可能进行真正声明类型的编译时或运行时检查? 为什么CLOS插槽定义的类型不能用作约束,而允许将任何类型的值放入插槽?再次,检查如何? 与declare相同的函数类型声明.它们只是对编译 ..
发布时间:2020-07-07 04:58:26 其他开发

CLOS:如何调用不太具体的方法?

有一个通用方法,例如incx. incx有两个版本.一种专门针对类型a,另一种专门针对类型b.类型b是a的子类.给您一个类型为b的对象,该对象为派生类型-但您想调用专门用于类型a的方法.如果还没有专门针对类型b的同名方法,那么您可以轻松地做到这一点,但是可惜,确实有这样一种方法. 那么在这种情况下如何调用专门针对类型a的方法? (defclass a () ((x :accessor ..
发布时间:2020-05-09 18:56:34 其他开发

普通Lisp中对象的内存使用情况

是否有办法找出一个类的实例或基本数据类型通常使用多少内存? 我在cl中有一个玩具网络框架,它使用代表html标签及其属性的类实例来创建和管理网页,并且由于它们应该构成html页面,因此它们在称为子级的插槽中具有子级.因此,我在考虑如果采用这种方法,用户会话将使服务器花费多少钱.谢谢. 解决方案 据我所知,标准中的任意对象都没有像这样的东西,但是有依赖于实现的解决方案,例如CCL中的c ..
发布时间:2020-05-08 21:41:10 其他开发

如何在Lisp中找到一个类的包?

假设我想找出在哪个包中定义了一个类,例如比如说(defclass x()())在p1中定义.一种方法是通过(symbol-package'x)获取软件包.此解决方案的问题是x导出到其他包p2中.还有其他建议吗? 解决方案 正如Rainer Joswig所说,类未在包中定义;符号具有包,类的名称是符号. 如果您想在读取,编译或加载类定义时了解*PACKAGE*的值(可能是三个不同的值) ..
发布时间:2020-05-02 04:38:07 其他开发

如何使用字符串访问未知实例的插槽?

问题 给出一个实例,inst和一个包含 slot 的名称的字符串attr,我可以在inst上获取插槽attr的值吗? 当然,如果attr是符号而不是字符串,我通常只使用(slot-value inst attr),但是似乎我需要包装信息来正确调用intern(见下文). 最小示例 (defpackage :pack1 (:use :common-lisp) (:ex ..
发布时间:2020-05-02 04:35:17 其他开发