Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在 Scheme * 返回其参数的乘积。如果不带参数调用,则返回 1,或带一个参数,则返回参数:
(*) => 1 (* 2) => 2
这有什么语义?它如何返回任何值?它似乎隐含地添加了一个参数 1 来执行乘法。这在哪里解释?
当遇到以下问题时,我的脑海中出现了这个问题:
(call-with-values * -) => -1
显然这是因为 1 是乘法的恒等式,但我在任何地方都看不到这个。简而言之,为什么没有参数的乘积是 1?
这是两者的有用属性+和*:当不带参数调用时,它们都返回各自操作的标识。(+)返回0而不是简单地抛出错误的事实可能更明显有用,因为它使得使用(apply + list-of-numbers)空列表对列表求和的常见习惯用法。类似地,您可以使用*列表中所有数字的乘积,但这显然不太有用。
+
*
(+)
0
(apply + list-of-numbers)
尽管如此,我+认为与 我不认为让它抛出会阻止这么多的错误,它可能会使一些有用的代码更难编写。我认为,让它返回身份提高了语言的“流畅性”(它内部更加一致)这一事实是 Scheme 感觉如此干净和有原则的语言的原因之一。*