2

在 Scheme * 返回其参数的乘积。如果不带参数调用,则返回 1,或带一个参数,则返回参数:

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

这有什么语义?它如何返回任何值?它似乎隐含地添加了一个参数 1 来执行乘法。这在哪里解释?

当遇到以下问题时,我的脑海中出现了这个问题:

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

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

4

1 回答 1

3

这是两者的有用属性+*:当不带参数调用时,它们都返回各自操作的标识。(+)返回0而不是简单地抛出错误的事实可能更明显有用,因为它使得使用(apply + list-of-numbers)空列表对列表求和的常见习惯用法。类似地,您可以使用*列表中所有数字的乘积,但这显然不太有用。

尽管如此,我+认为我不认为让它抛出会阻止这么多的错误,它可能会使一些有用的代码更难编写。我认为,让它返回身份提高了语言的“流畅性”(它内部更加一致)这一事实是 Scheme 感觉如此干净和有原则的语言的原因之一。*

于 2016-04-09T02:52:48.383 回答