Scheme中`(begin)`的返回值是多少?

In Scheme, what is the returned value of `(begin)`?

我知道 (begin expr1 expr2 ...) 将对所有表达式求值,return 最后一个求值。

我发现在 Chez Scheme 中允许使用 begin 而无需像这样的表达式:(begin)。我在学习中使用 Chez Scheme。当我在控制台 (begin) 中写入时,它不会发送语法错误,它只是什么都不显示,就好像我得到 void 一样。

我的问题是,那么 return 会编辑什么?

我以为是运行(void)可以得到的void对象。 然而,当我测试它时,我发现它不是。

我正在学习 Chez Scheme 作为我正在学习的编译器课程的一部分,我需要实现可以处理特殊词 begin 的编译器的一部分。所以我需要知道为什么这甚至是可能的以及这个函数是什么 returns.

编辑:

我要添加关于此主题的 。 我无法完全理解答案。另外,他没有提到 return 类型。

我认为这个问题混淆了 begin 的不同用途。如果您查看 R6RS section 11.4.7 关于 begin,它有两种不同的使用方式:1) 0 个或多个 "forms",在这种情况下,形式在句法上是 "spliced"包围 body 就像 begin 不存在一样(我相信这在编写宏时主要有用);和 2) 有 1 个或多个表达式,在这种情况下,它按顺序计算表达式和 returns 最后一个的结果。

当你说"return value"的时候,你说的是(begin ...)作为一个表达式,但是作为一个表达式(上面begin的第二种形式),它必须取一个或更多的表达。一个空的 (begin) 一定是 begin 的第一种形式,它只是将 "nothing" (0 种形式)拼接到周围的 body,但它不是 "evaluated"与 body 整体的评估分开。