Common lisp 为标准公共Lisp函数定义别名?
据说Lisp能够重新定义其核心功能。 我想为函数定义一个别名Common lisp 为标准公共Lisp函数定义别名?,common-lisp,sbcl,Common Lisp,Sbcl,据说Lisp能够重新定义其核心功能。 我想为函数定义一个别名cl:documentation函数,这样 (doc 'write 'function) === (documentation 'write 'function) 如何在SBCL中做到这一点并使其永久化?创建别名 您不是在尝试(即更改系统函数的定义),而是希望用一个较短的名称来定义自己的函数,该名称与系统函数的作用相同 这可以通过以下方式实现: 如何在common lisp中使更改“永久” 没有标准的方法,不同的实现可能会有不同的方法
cl:documentation
函数,这样
(doc 'write 'function) === (documentation 'write 'function)
如何在SBCL中做到这一点并使其永久化?创建别名
您不是在尝试(即更改系统函数的定义),而是希望用一个较短的名称来定义自己的函数,该名称与系统函数的作用相同
这可以通过以下方式实现:
如何在common lisp中使更改“永久”
没有标准的方法,不同的实现可能会有不同的方法,但是,一般来说,有两种常见的方法
向init文件添加代码-适用于初学者和临时用户
- 易于修改(只需编辑文件)
- 占用很少的磁盘空间
- 正常lisp调用捕获更改
- 每次启动lisp时进行计算(因此,如果代码运行缓慢,则会减慢启动时间)
- -
- 启动正常运行时间不受影响
- 每一次改变都需要重新改变世界
- Lisp图像通常是一个大文件(>10MB)
- 必须在调用时指定映像
(defmacro alias (to fn)
`(setf (fdefinition ',to) #',fn))
e、 g
(别名neg-
=>#
(负10)
=>-10
其他答案包括如何使其永久化的细节。可能的副本;请修改这个问题。你的意思是什么。除了没有关于如何使这个永久化的信息之外?也许我只是一个noob,因为我刚刚开始学习common lisp。什么是“REPL函数”?对不起,我指的是内置的
文档
函数,这样in可以在这个缩短的版本中使用,特别是在REPL中。(setf(symbol function'doc)#文档)
。将其设置或加载到SBCL的init文件中。请注意,init文件和图像保存不是Common Lisp的一部分;这些是实现扩展。(非常常见和有用,因此这里的建议很好,但是标准中没有指定它们,因此每个实现可能,例如,使用不同的init文件名,使用不同的函数保存图像等)感谢您改进了初始答案!:)
(defmacro alias (to fn)
`(setf (fdefinition ',to) #',fn))