我想知道为什么每个常见的lisp函数/宏定义都返回正在定义的内容?它可以返回nil或函数本身.为什么要返回定义的符号?我能做点什么吗?
> (defun foo ()) => foo
> (defmacro bar ()) => bar
Run Code Online (Sandbox Code Playgroud)
我希望Lisp中的每个定义形式都返回已定义的名称(如in DEFUN)或已定义的对象(如in DEFCLASS).
这是一个有用的值,以后可以使用.在Lisp交互中,变量*,**并***具有最后的值.因此,您可以使用解释器和编译器在Lisp中执行:
CLISP:
[1]> (defun foo-with-a-long-name (a) (+ a 42))
FOO-WITH-A-LONG-NAME
Run Code Online (Sandbox Code Playgroud)
编译该函数只是:
[2]> (compile *)
FOO-WITH-A-LONG-NAME ;
NIL ;
NIL
Run Code Online (Sandbox Code Playgroud)
没有错误.我们来看看反汇编:
[3]> (disassemble *)
Disassembly of function FOO-WITH-A-LONG-NAME
(CONST 0) = 42
1 required argument
0 optional arguments
No rest parameter
No keyword parameters
4 byte-code instructions:
0 (CONST&PUSH 0) ; 42
1 (LOAD&PUSH 2)
2 (CALLSR 2 55) ; +
5 (SKIP&RET 2)
NIL
Run Code Online (Sandbox Code Playgroud)
好的,看起来不错.