为什么每个常见的lisp都返回正在定义的内容

Jua*_*tas 3 common-lisp

我想知道为什么每个常见的lisp函数/宏定义都返回正在定义的内容?它可以返回nil或函数本身.为什么要返回定义的符号?我能做点什么吗?

> (defun foo ()) => foo

> (defmacro bar ()) => bar
Run Code Online (Sandbox Code Playgroud)

Rai*_*wig 5

我希望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)

好的,看起来不错.