乘法运算符

时间:2016-04-09 02:34:58

标签: scheme guile

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

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

这有什么语义?它怎么能回报任何价值?它似乎隐含地添加了1的参数来执行乘法。这在哪里解释了?

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

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

显然这是因为1是乘法的同一性,但我无法在任何地方看到这个。简而言之,为什么没有参数的产品1?

1 个答案:

答案 0 :(得分:3)

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

尽管如此,我认为+的类似物足以证明*至少的零参数行为是有意义的。我不认为将其抛出会阻止所有这些错误,并且可能会使一些有用的代码更难写。我认为让它返回身份的事实改善了语言的“平滑性”(它更内部一致)是Scheme感觉像这种干净和原则性语言的原因之一。