【发布时间】:2017-06-30 14:08:21
【问题描述】:
我使用 ELISP 已经有一段时间了,现在我决定使用 Common Lisp,使用 Emacs 的 cl-lib.el 扩展名。问题是cl-lib.el 是为 Emacs 提供完整的 CLISP 扩展,还是部分支持 CLISP?另一个问题,如果我在一个包中包含cl-lib.el(我有多个包),这是否意味着cl-lib.el 也将应用于所有其他包?例如,如果我有:
(load "~/elisp/file1.el") ; (require 'cl-lib.el)
(load "~/elisp/file2.el") ; does it automatically use cl-lib.el or not?
【问题讨论】:
-
cl-lib.el是cl.el的子集。创建它是因为有些人想使用cl.el的一些更常用的部分,而不需要在运行时加载所有cl.el。 -
如果您想在字节编译时加载 CL 宏,并且在运行时不需要任何 CL 函数,那么您不需要在运行时加载
cl-lib.el或cl.el- 只需(eval-when-compile (require 'cl))或(eval-when-compile (require 'cl-lib)) -
旁注:CLISP 是特定 Common Lisp 编译器的名称,而不是语言的名称。
-
@Drew:
cl-lib并不是cl的子集。它更像是cl的继承者,主要区别在于命名(所有定义的名称都以cl-前缀开头)。cl的一些部分在引入cl-lib时已移至核心(主要是setf),并且完全删除了一些稀有元素,并且还添加了其他稀有元素,但总的来说,它们几乎具有相同的内容。
标签: emacs common-lisp elisp