Common lisp 为什么每个常见的lisp都返回什么';正在定义什么

Common lisp 为什么每个常见的lisp都返回什么';正在定义什么,common-lisp,Common Lisp,我想知道为什么每个常见的lisp函数/宏定义都返回定义的内容?它可以返回nil或函数本身。为什么返回定义的符号?我能做些什么吗 > (defun foo ()) => foo > (defmacro bar ()) => bar 每个表单返回某些内容的原因是它是如何通过设计生成的。在read-eval打印循环中,这非常有用,因此即使未使用,也可以获得确认 返回的内容并不重要,除非CL在其规范中包含它,以便每个CL都执行相同的操作 记住,它只在REPL中显示返回的内容。

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

> (defun foo ()) => foo

> (defmacro bar ()) => bar

每个表单返回某些内容的原因是它是如何通过设计生成的。在read-eval打印循环中,这非常有用,因此即使未使用,也可以获得确认

返回的内容并不重要,除非CL在其规范中包含它,以便每个CL都执行相同的操作

记住,它只在REPL中显示返回的内容。运行脚本时,仅显示打印的内容


另一种主要方言,Scheme,据说在变异时不会返回任何东西。。实际上,实现返回一个只有REPL忽略的特殊对象。如果您(display(set!X 6)),您将得到打印的内容。

我希望Lisp中的每个定义表单要么返回已定义内容的名称(如
DEFUN
),要么返回已定义的对象(如
DEFCLASS

这是一个有用的值,以后可以使用。在Lisp交互中,变量
*
***
***
具有最后的值。因此,您可以在带解释器和编译器的Lisp中执行以下操作:

CLISP:

[1]> (defun foo-with-a-long-name (a) (+ a 42))
FOO-WITH-A-LONG-NAME
编译函数的步骤如下:

[2]> (compile *)
FOO-WITH-A-LONG-NAME ;
NIL ;
NIL
没有错误。让我们看看拆解:

[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

好的,看起来不错。

>我能做些什么吗?--换行另一个宏?我不知道为什么会出现这种行为,但返回
nil
对我来说似乎更不有用。我真的想不出还有什么有用的东西可以从
defmacro
返回…>我能做些什么吗?-这种行为造成了什么问题?如果我们能帮忙的话more@Baggers只是出于好奇。谢谢你的回复。你是在猜测,CL规范中没有给出这个理由。@RainerJoswig如果我们能够同意CLHS是规范,那么它就指定了。规范中没有任何东西意味着什么,例如“确认”。因此你不认为CL符合而不是其他东西,然后呢?试着在说明书中找到确认这个词。。。它只指定DEFUN返回名称。但对它没有任何意义。此外,也没有规定在加载或编译Lisp文件时,如果看到DEFUN,Lisp将无法显示任何内容。