为标准的Common Lisp函数定义别名?

sja*_*jas 5 sbcl common-lisp

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

(doc 'write 'function) === (documentation 'write 'function)
Run Code Online (Sandbox Code Playgroud)

如何在SBCL中完成并永久化?

sds*_*sds 11

创建别名

您没有尝试重新定义(即更改系统函数的定义)documentation,您希望使用较短的名称定义自己的函数,这将与系统函数执行相同的操作.

这可以使用fdefinition:

 (setf (fdefinition 'doc) #'documentation)
Run Code Online (Sandbox Code Playgroud)

如何使您的变更在常见的lisp中"永久"

没有标准的方法,不同的实现可能会有不同的方式,但是,一般来说,有两种常见的方式.

将代码添加到init文件 - 适用于初学者和临时用户

每次lisp启动时,都会重新评估相关代码.

优点:

  • 易于修改(只需编辑文件)
  • 占用很少的磁盘空间
  • 正常的lisp调用捕获更改

缺点:

  • 每次启动lisp时评估(因此,如果代码很慢,则启动时间会变慢)

保存图像 - 适用于重量级专业人士

修改后的lisp世界将保存到磁盘.

优点:

  • 启动正常运行时间不受影响

缺点:

  • 需要在每次更改时重新倾倒世界
  • Lisp图像通常是一个大文件(> 10MB)
  • 必须在调用时指定图像


Pue*_*Pop 5

尽管@sds 已经回答得很彻底,但我只想补充一点,实用程序库 serapeum 有defalias