PeN*_*peL 1 compiler-construction scheme language-implementation expression-evaluation chez-scheme
我知道它将(begin expr1 expr2 ...)评估所有表达式并返回最后评估的表达式。
我发现在 Chez Scheme 中允许使用begin不带表达式的形式,如下所示:(begin)。我正在使用 Chez Scheme 作为我学习的一部分。当我在控制台中写入时,(begin)它不会发送语法错误,它只是显示任何内容,就好像我收到了void.
我的问题是,那么会返回什么?
我以为这是你可以通过运行获得的 void 对象(void)。然而,当我测试它时,我意识到事实并非如此。
我正在学习 Chez Scheme 作为我正在学习的编译器课程的一部分,我需要实现可以处理特殊单词 的编译器的一部分begin。所以我需要知道为什么这是可能的以及这个函数返回什么。
编辑:
我正在添加有关此主题的链接。我无法完全理解答案。另外,他没有提到返回类型。
我认为这个问题混淆了 的不同用途begin。如果你看一下R6RS第 11.4.7 节begin,它有两种不同的使用方式:1) 具有 0 个或多个“形式”,在这种情况下,形式在语法上“拼接”到周围的主体中,就像没有begin一样那里(我相信这在编写宏时主要有用);2) 有 1 个或多个表达式,在这种情况下,它按顺序计算表达式并返回最后一个表达式的结果。
当你谈论“返回值”时,你谈论的是(begin ...)作为一个表达式,但作为一个表达式(上面的第二种形式begin),它必须采用一个或多个表达式。空(begin)必须是 的第一种形式begin,它只是将“无”(0 形式)拼接到周围的主体中,但它不会与整个主体的评估分开“评估”。