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 整体的评估分开。
我知道 (begin expr1 expr2 ...)
将对所有表达式求值,return 最后一个求值。
我发现在 Chez Scheme 中允许使用 begin
而无需像这样的表达式:(begin)
。我在学习中使用 Chez Scheme。当我在控制台 (begin)
中写入时,它不会发送语法错误,它只是什么都不显示,就好像我得到 void
一样。
我的问题是,那么 return 会编辑什么?
我以为是运行(void)
可以得到的void对象。
然而,当我测试它时,我发现它不是。
我正在学习 Chez Scheme 作为我正在学习的编译器课程的一部分,我需要实现可以处理特殊词 begin
的编译器的一部分。所以我需要知道为什么这甚至是可能的以及这个函数是什么 returns.
编辑:
我要添加关于此主题的
我认为这个问题混淆了 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 整体的评估分开。