lisp函数的实现

时间:2015-10-15 06:22:35

标签: function lisp common-lisp

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

2 个答案:

答案 0 :(得分:2)

您还可以查看lisp函数的源代码。

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

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

答案 1 :(得分:1)

通常的答案是“M-.

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

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

来查看实际编译的表单

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

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

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

我应该写下这个:

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

核心库函数通常经过高度优化,并且比大多数用户级代码都要复杂得多,并且经常调用特定于编译器的“胆量”,应该避免在应用程序代码中执行此操作。