2012-01-24 36 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'+'())''。 –