Common lisp 为标准公共Lisp函数定义别名?

Common lisp 为标准公共Lisp函数定义别名?,common-lisp,sbcl,Common Lisp,Sbcl,据说Lisp能够重新定义其核心功能。 我想为函数定义一个别名cl:documentation函数,这样 (doc 'write 'function) === (documentation 'write 'function) 如何在SBCL中做到这一点并使其永久化?创建别名 您不是在尝试(即更改系统函数的定义),而是希望用一个较短的名称来定义自己的函数,该名称与系统函数的作用相同 这可以通过以下方式实现: 如何在common lisp中使更改“永久” 没有标准的方法,不同的实现可能会有不同的方法

据说Lisp能够重新定义其核心功能。 我想为函数定义一个别名
cl:documentation
函数,这样

(doc 'write 'function) === (documentation 'write 'function)
如何在SBCL中做到这一点并使其永久化?

创建别名 您不是在尝试(即更改系统函数的定义),而是希望用一个较短的名称来定义自己的函数,该名称与系统函数的作用相同

这可以通过以下方式实现:

如何在common lisp中使更改“永久” 没有标准的方法,不同的实现可能会有不同的方法,但是,一般来说,有两种常见的方法

向init文件添加代码-适用于初学者和临时用户
每次lisp启动时,都将重新评估有问题的代码

赞成的意见:
  • 易于修改(只需编辑文件)
  • 占用很少的磁盘空间
  • 正常lisp调用捕获更改
反对的论点:
  • 每次启动lisp时进行计算(因此,如果代码运行缓慢,则会减慢启动时间)
保存图像-适合体重过重的专业人士
  • -
修改后的lisp世界将保存到磁盘

赞成的意见:
  • 启动正常运行时间不受影响
反对的论点:
  • 每一次改变都需要重新改变世界
  • Lisp图像通常是一个大文件(>10MB)
  • 必须在调用时指定映像

尽管@sds已经给出了非常详尽的回答,但我只想补充一点,即实用程序库serapeum有一个

为此,我使用了一个简单的宏:

(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))