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

时间:2017-11-23 10:49:10

标签: compiler-construction scheme expression-evaluation language-implementation chez-scheme

我知道(begin expr1 expr2 ...)将评估所有表达式并返回最后一个表达式。

我发现在Chez Scheme中,允许使用begin而不使用像(begin)这样的表达式。我使用Chez Scheme作为学习的一部分。当我在控制台(begin)中写入时,它不会发送语法错误,它只显示没有像我void那样。

我的问题是,将会返回什么内容?

我认为通过运行(void)可以获得虚空对象。 但是,当我测试它时,我意识到它不是。

我正在研究Chez Scheme作为编译器课程的一部分,我需要实现一个可以处理特殊字begin的编译器的一部分。所以我需要知道为什么这甚至可能以及这个函数返回的内容。

编辑:

我正在就此主题添加this link。 我无法完全理解答案。另外,他没有提到返回类型。

1 个答案:

答案 0 :(得分:2)

我认为这个问题混淆了<item android:height="200dp" android:width="200dp" android:drawable="@drawable/splash_logo" android:gravity="center"> </item> 的不同用法。如果您查看关于begin的{​​{3}},则会以两种不同的方式使用它:1)使用0或更多&#34;形式&#34;,在这种情况下,表单在语法上是&#34;剪接&#34;进入周围的身体,就好像begin不在那里(我相信这在编写宏时非常有用); 2)有1个或多个表达式,在这种情况下,它按顺序计算表达式并返回最后一个表达式的结果。

当你谈到&#34;返回值&#34;时,你在谈论begin作为表达式,但作为表达式(上面的(begin ...)的第二种形式),它必须采取一个或多个表达式。空begin必须是(begin)的第一种形式,它只是简单地拼接&#34;没有&#34; (0形式)进入周围的身体,但它没有被评估&#34;与整个身体的评估分开。

相关问题