clos

Using CLOS class instances as hash-table keys?

孤人 提交于 2019-12-07 03:38:57
问题 I have the following class: (defclass category () ((cat-channel-name :accessor cat-channel-name :initarg :cat-channel-name :initform "" :type string :documentation "Name of the channel of this category") (cat-min :accessor cat-min :initarg :min :initform 0 :type number :documentation "Mininum value of category") (cat-max :accessor cat-max :initarg :max :initform 1 :type number :documentation "Maximum value of category")) (:documentation "A category")) Now, I would like to use this class as a

Lisp-Stat 翻译 —— 第二章 Lisp-Stat教程

早过忘川 提交于 2019-12-06 21:23:40
第二章 一份Lisp-Stat教程 本章打算将使用Lisp-Stat作为统计计算器和绘图器做一个介绍。在介绍完基本的数值和绘图操作之后,介绍如何构建随机的和系统的数据集合,如何修改数据集,如何使用一些内建的动态绘图工具,如何构建线性回归模型。最后两节给出了简略的介绍,关于如何写你自己的函数和使用功能数据进行高级建模的工具。 2.1 Lisp解释器 你与Lisp-Stat系统的交互是由你和lisp解释器之间的对话组成的。想象一下,你坐在计算机前打开了你的系统,或者更好点儿,你获取了某个版本的Lisp-Stat,并且启动了它。当准备好要开始对话时,Lisp-Stat在一个空白行的前边给出了一个提示符,就像这样: > 如果你键入一个表达式,解释器就会打印这个表达式的计算结果来响应你。例如,如果你给解释器一个数字,然后按回车键,那么解释器就会响应你——简单地 打印 这个数字,然后 在下一行 退出并给你一个新的提示符。 > 1 1 > 对数字的操作可以通过组合数字和一个符号并把它们复合成一个表达式来执行,就像这样(+ 1 2): > (+ 1 2) 3 > 就像你猜想的一样,这个表达式就是将数字1和2加在一起。这种操作符放在操作数前边的表示方法叫前置表示法。这种表示方法起初可能让你很迷惑,因为它背离了标准的数学实践,但是却会带来一些很有意义的优势。一个优势是可以容纳进行任意数量的参数操作

Common Lisp class hierarchy

五迷三道 提交于 2019-12-06 11:40:19
问题 Greg Pfeil's Class Hierarchy diagram provides a comprehensive picture the Common Lisp type system. But I'm trying to better understand the class relationships at the top of the hierarchy. For a simple example, let (defstruct person name age) , and then (defparameter *p1* (make-person :name "Yosh" :age 19) . Now (typep *p1* 'person) T (typep *p1* 'structure) T (typep *p1* 'structure-object) T (typep *p1* 'atom) T (typep *p1* t) T The Hyperspec says the precedence list for structure-object is

Common Lisp对象系统(CLOS)的一个小小的实例

血红的双手。 提交于 2019-12-06 06:29:27
本文是对《Practical Common Lisp》第16章的简单代码注解。CLOS为Common Lisp Object System的缩写,与所有面向对象语言相同,CLOS是基于类组织起来的,所不同的是广义函数而非消息传递是对象与方法通信的桥梁。 以下是实现的几个简单功能,模拟电梯升降的逻辑可能有不妥之处,但不影响对简单CLOS的表述。 ;;;;;; 电梯模拟程序 ;;;;; (defclass lift () ((lift-length :initarg :lift-length :initform 3) (lift-wide :initarg :lift-wide :initform 2) (lift-height :initarg :lift-height :initform 3) (lift-status :initarg :lift-status :initform 1) (floor-count :initform 8 :reader floor-count :writer (setf floor-count)) (floor-number-now :initform 1 :reader floor-number-now :writer (setf floor-number-now)))) #| @brief 电梯运行延时 @param seconds --

Lisp-Stat 翻译 —— 第一章 简介

自闭症网瘾萝莉.ら 提交于 2019-12-06 06:29:17
第一章 简介 1.1 统计计算环境 以前,统计计算主要集中于数值 计算 。那时的计算机运行速度慢,为了获得合理的性能,人们不得不在一个相对较低水平上细心地编写程序。结果,为了效率,大多数早期的统计系统都是简单的终端机而不是严格的数值算法。使用这些系统的人们需要提交他们的统计需求,然后在当天的晚些时候或者第二天才能拿到结果。 随着计算机变得越来越快,越来越廉价,将以前花费几小时或者几天才能完成的计算工作在几分钟或几秒钟内完成已经成为可能。这种发展对统计软件提出了新的挑战。由于现在的计算机硬件能够在短期内完成不同的计算与分析任务,一个支持性的统计软件环境要使以下步骤变得简单易行——将不同的计算结果展示到计算机上,将一台计算机的计算结果传递到另一台计算机上,检测计算结果,跟踪计算过程。进一步说,随着一些计算流程的重复使用(有可能有细微的变化),将此计算流程作为一个单元来描述和请求调用,建立一个简单的抽象已经成为可能。简而言之,为了补充现代计算机硬件的能力,统计环境必须是一个带有交互能力的统计语言。 另一个重要的发展发生在对计算速度的并行性上。越来越多的统计计算是在配置了高分辨率的个人电脑和工作站上完成的。这类高分辨率显示硬件开拓了很多新的机遇。统计研究的一个最令人激动的领域就是动态计算机绘图领域和它在统计学上的应用。多年以来,绘图方法已经成为统计学上的一个重要工具。但是

How to force slot's type to be checked during make-instance?

旧巷老猫 提交于 2019-12-06 02:56:26
问题 Let's say I have the following class declaration: (defclass foo-class () ((bar :initarg :bar :type list))) When I create an instance of this class, make-instance won't check whether passed arguments satisfy types of slots. So, I can create "invalid" objects this way: > (make-instance 'foo-class :bar 'some-symb) #<FOO-CLASS {102BEC5E83}> However, what I'd like to see is the behavior similar to the creation of an instance of a struct, where the types are checked: (defstruct foo-struct (bar nil

Lisp-Stat windows环境搭建

微笑、不失礼 提交于 2019-12-05 21:06:18
概述 lisp-stat是使用lisp语言进行统计计算和绘图的环境。由于面向对象在统计计算中的优势,lisp-stat选择CLOS进行编程。关于lisp-stat的详细介绍可参照文档 lisp-stat an object-oriented environment . 获取lisp-stat lisp-stat官方主页 lisp-stat的ftp地址 DOS下进入lisp-stat的ftp目录 (用户名:anonymous 密码:your email) : E:> ftp ftp.stat.umn.edu ftp> cd pub/xlispstat/current/mswin/ 尤其关键的一步是要将ftp传输模式改为binary,否则安装时出现乱码: ftp> binary 使用get命令获取 "WXLSZIP.EXE" "WXLS32ZP.EXE" "README"三个文件,以WXLS32ZP.EXE为例: ftp> get 远程文件 "WXLS32ZP.EXE" 本地文件 "E:\\lisp-stat\\WXLS32ZP.EXE" 以 -d参数执行WXLS32ZP.EXE文件( 文件全部安装在当前目录下) : E:\LISP-STAT> WXLS32ZP.EXE -d 运行WXLS32.EXE,如下图,表示环境安装成功: 测试 运行个hello list-stat

This is a bug in sbcl?

故事扮演 提交于 2019-12-05 11:28:32
Why happen this in sbcl? Maybe a bug? (defclass myclass () ((s1 :initform '((a . 1) (b . 2))) (s2 :initform '((a . 1) (b . 2))))) (defparameter ins (make-instance 'myclass)) (setf (cdr (assoc 'a (slot-value ins 's1))) 43) ;; change only slot s1 ;; here my problem (slot-value ins 's1) ;; => ((a . 44) (b . 2))) (slot-value ins 's2) ;; => ((a . 44) (b . 2))) But if change :initform to : (defclass myclass () ((s1 :initform '((a . 1) (b . 2))) (s2 :initform '((a . 1) (b . 3))))) The problem disappears I test this in sbcl 1.4.3 and 1.4.11 . In clisp it seems that the problem does not arise. No. You

Using CLOS class instances as hash-table keys?

放肆的年华 提交于 2019-12-05 07:11:42
I have the following class: (defclass category () ((cat-channel-name :accessor cat-channel-name :initarg :cat-channel-name :initform "" :type string :documentation "Name of the channel of this category") (cat-min :accessor cat-min :initarg :min :initform 0 :type number :documentation "Mininum value of category") (cat-max :accessor cat-max :initarg :max :initform 1 :type number :documentation "Maximum value of category")) (:documentation "A category")) Now, I would like to use this class as a key for a hash-table. The addresses of instances can be easily compared with eq . The problem is

Common Lisp class hierarchy

让人想犯罪 __ 提交于 2019-12-04 17:41:00
Greg Pfeil's Class Hierarchy diagram provides a comprehensive picture the Common Lisp type system. But I'm trying to better understand the class relationships at the top of the hierarchy. For a simple example, let (defstruct person name age) , and then (defparameter *p1* (make-person :name "Yosh" :age 19) . Now (typep *p1* 'person) T (typep *p1* 'structure) T (typep *p1* 'structure-object) T (typep *p1* 'atom) T (typep *p1* t) T The Hyperspec says the precedence list for structure-object is only itself and t . Are atom and structure not types in the hierarchy? What are all the direct subtypes