2012-01-24 47 views

回答

10

这是一个数学公约:根据定义,product of an empty sequence of numbers是一个数学公约。注意一个是用于乘法的恒等元件(1×a = a×1 = a)。这很方便,因为您可以使用可变数量的参数调用*,而不必担心没有参数的情况。

类似地,数字的空序列的和为零,用于加法的标识元素。尝试在你的Lisp提示下发行(+)

+4

'(*(+)*(*)(*)(*)(*)(*)(*)(*) (*(+(*)(*)(*)(*))(+(*)(*)(*))(+(*)(*)(*)))))' –

+0

@EliBarzilay:is野兽的sexpr? –

+0

larsmans,谢谢你的明确答案。 – karasiov

4

它是从数学继承的属性。这就像此外,你可以加在一起的任何数字的数字,特殊情况下,不添加数字在一起给你零和。

同样的乘法,如果你乘以任意数量的数字,你会得到产品。为了让它适用于没有数字的情况,使用1作为基础值(在数学中有一些奇特的名字,这在很多年前我已经忘记了)。

那么,你在编程语言中有没有实际的用处呢?是的,因为你可以用任意数量的参数调用+*等函数,我会说是。例如:

(apply '+ '(2 3 4)) => 9 
(apply '+ '(2 3)) => 5 
(apply '+ '(2))  => 2 
(apply '+ '())  => 0 

(apply '* '(2 3 4)) => 24 
(apply '* '(2 3)) => 6 
(apply '* '(2))  => 2 
(apply '* '())  => 1 
+1

注意:在Scheme中,您必须删除运算符前的'''(即'quote')才能运行的示例。例如,'(apply +'())',而不是'(apply'+'())''。 –