lisp函数的实现

implementations of lisp functions

在C中,如果我想看一个函数如何工作,我打开提供函数的库并分析代码。如何看到 lisp 函数的实现?例如交集函数

你也可以看看lisp函数的源码

例如,CLISP 的源文件,一种 Common Lisp 实现,可在此处获得:http://www.clisp.org/impnotes/src-files.html

如果想考察列表相关函数的实现,可以看文件:http://clisp.cvs.sourceforge.net/viewvc/clisp/clisp/src/list.d

通常的答案是“M-.

假设您有正确配置的 IDE 和函数的源代码,单击其名称并按 M-.(即 Meta、Alt、Option 或 Escape,以及 dot/period; 或者你的 IDE 使用的任何键)应该揭示它的定义(或者,对于通用函数,定义,复数;包括任何可能优化某些情况的编译器宏)。有时它在右键单击或其他鼠标菜单或工具栏上。

如果源代码不可用,您通常可以通过评估 (disassemble 'function)

来查看实际编译的形式

大多数 IDE,包括常年喜爱的 Emacs+Slime,菜单上还有其他检查操作。

在非IDE环境中,大多数编译器都有自己的反射工具(依赖于编译器),通常也由 Slime 使用的 Swank 库映射;人们可能会在该包中找到有用的功能。

这确实应该记录在您的 IDE 手册中。


我应该附上这个:

你真的不应该关心核心库函数的实现;他们的合同行为在 CLHS 标准中有很好的记录,该标准可在线获取,例如,Quicklisp 有一个实用程序可以 link 它到 Slime(C-c C-d hCOMMON-LISP 包中的符号上) ;对于所有编写良好的 Lisp 库,应该有附加到函数、变量、类 等的文档,可通过 REPL 中的 documentation 函数或 IDE 的菜单和检查访问windows.

核心库函数通常经过高度优化,并且比大多数用户级代码应该想要的复杂得多,并且经常调用特定于编译器的 "guts" 应该避免在应用程序代码中这样做。