据说 Lisp 能够重新定义其核心功能。
我想为该函数定义一个别名cl:documentation
函数,使得
(doc 'write 'function) === (documentation 'write 'function)
如何才能做到这一点并使其在 SBCL 中永久存在?
创建别名
你并不想redefine(即更改系统功能的定义)documentation,您想用更短的名称定义自己的函数,该函数将执行与系统函数相同的操作。
这可以使用以下方法完成fdefinition:
(setf (fdefinition 'doc) #'documentation)
如何使您的更改在 Common Lisp 中“永久”
没有标准的方法,不同的实现可能会有所不同,但一般来说,有两种常见的方法。
将代码添加到初始化文件 - 适合初学者和临时用户
每次 lisp 启动时,都会重新计算有问题的代码。
Pro:
- 易于修改(只需编辑文件)
- 占用很少的磁盘空间
- 正常的 Lisp 调用捕获变化
Con:
- 每次启动 lisp 时都会进行评估(因此,如果代码很慢,则会减慢启动时间)
保存图像 - 适合重量级专业人士
- SBCL
- CLISP
- Clozure
-
ECL - 不支持
修改后的 Lisp 世界将保存到磁盘。
Pro:
Con:
- 每次更改都需要重新转储世界
- Lisp 图像通常是一个大文件 (>10MB)
- 必须在调用时指定图像
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)