在C中,如果我想看一个如何工作的函数,我打开提供该函数并分析代码的库。如何看待lisp函数的实现?例如,交叉函数
答案 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的菜单和检查窗口访问。
核心库函数通常经过高度优化,并且比大多数用户级代码都要复杂得多,并且经常调用特定于编译器的“胆量”,应该避免在应用程序代码中执行此操作。