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

时间:2014-06-16 21:29:34

标签: common-lisp sbcl

Lisp据说可以重新定义其核心功能。 我想定义函数cl:documentation函数的别名,例如

(doc 'write 'function) === (documentation 'write 'function)

如何在SBCL中完成并永久保留?

3 个答案:

答案 0 :(得分:9)

创建别名

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

可以使用fdefinition

完成此操作
 (setf (fdefinition 'doc) #'documentation)

如何进行更改"永久性"共同的lisp

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

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

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

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

缺点:

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

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

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

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

缺点:

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

答案 1 :(得分:4)

尽管@sds已经非常彻底地回答了我只是想补充说实用程序库serapeum有defalias

答案 2 :(得分:1)

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

(defmacro alias (to fn)
    `(setf (fdefinition ',to) #',fn))

e.g。

(alias neg -) =&gt; #<Compiled-function ... >

(neg 10) =&gt; -10

其他答案包括如何使此永久性的详细信息。