乘法运算符

Multiplication operator

在方案中 * returns 其参数的乘积。如果不带参数调用它 returns 1,或者带一个参数它 returns 参数:

(*) => 1
(* 2) => 2

这是什么语义?它怎么能return任意值呢?它似乎隐含地添加参数 1 来执行乘法。哪里解释了?

遇到以下问题时,我想到了这个问题:

(call-with-values * -) => -1

显然这是因为 1 是乘法的恒等式,但我看不到它在任何地方被提及。简而言之,为什么没有参数的乘积是1?

这是 +* 的有用 属性:它们都 return 在不带参数调用时各自操作的标识。 (+) returns 0 而不是简单地抛出错误这一事实可能更有用,因为它使使用 (apply + list-of-numbers) 对列表求和的常见习惯用法适用于空列表。同样,您可以使用 * 来计算列表中所有数字的乘积,但这可能不太明显有用。

不过,我认为 + 的类比足以证明 * 的零参数行为至少 是有意义的 。我不认为让它抛出会阻止所有的错误,它可能会使一些有用的代码更难编写。我认为使 return 身份提高语言的“流畅性”这一事实(它在内部更加一致)是 Scheme 感觉如此干净和有原则的语言的原因之一。