2012-01-24 14 views

Odpowiedz

10

Jest to konwencja matematyczna: z definicji jest to product of an empty sequence of numbers; zauważ, że jeden jest elementem tożsamości dla multiplikacji (1 × a = a × 1 = a). Jest to wygodne, ponieważ można wywoływać * ze zmienną liczbą argumentów bez obawy o przypadek, w którym nie ma żadnych argumentów.

Podobnie suma pustej sekwencji liczb wynosi zero, element tożsamości do dodawania. Spróbuj wydać (+) w wierszu polecenia Lisp.

+4

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

+0

@ EliBarzilay: jest że sexpr Bestii? –

+0

larsmans, dziękuję za jasną odpowiedź. – karasiov

4

Jest to własność odziedziczona po matematyce. To jest jak , można dodać dowolną liczbę liczb, ze szczególnym przypadkiem, w którym nie dodanie liczb razem daje sumę zero.

Podobnie dla mnożenia, jeśli pomnożymy dowolną liczbę liczb, otrzymasz produkt. Aby to zadziałało bez liczb, 1 jest używane jako wartość bazowa (która ma jakąś wymyślną nazwę w matematyce, o której zapomniałem wiele lat temu).

Czy masz do tego praktyczne zastosowanie w języku programowania? Tak, ponieważ możesz wywoływać funkcje takie jak + i * z dowolną liczbą argumentów, powiedziałbym "tak". Na przykład:

(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

Uwaga: w schemacie należy usunąć '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. Na przykład, '(zastosuj + '())' zamiast '(zastosuj' + '())'. –