2013-12-18 25 views
6

używam GNU/Program MIT:Dlaczego + i * oceniają odpowiednio 0 i 1?

1 ]=> (+) 

;Value: 0 

1 ]=> (*) 

;Value: 1 

1 ]=> (-) 

;The procedure #[arity-dispatched-procedure 2] has been called with 0 arguments; it requires at least 1 argument. 
;To continue, call RESTART with an option number: 
; (RESTART 1) => Return to read-eval-print level 1. 

2 error> (/) 

;The procedure #[arity-dispatched-procedure 3] has been called with 0 arguments; it requires at least 1 argument. 
;To continue, call RESTART with an option number: 
; (RESTART 2) => Return to read-eval-print level 2. 
; (RESTART 1) => Return to read-eval-print level 1. 

Dlaczego + i * oceniane są zarówno do 0 i 1, odpowiednio. I dlaczego ocena - i / powoduje błąd?

Czy jest to część definicji Schematu, czy też jest to szczegół wdrożenia w systemie GNU/MIT?

+0

https://en.wikipedia.org/wiki/Empty_product https://en.wikipedia.org/wiki/Empty_sum – Wes

Odpowiedz

9

Rozumowanie to, że + i * mają elementy tożsamości

1 * x = x * 1 = x 
0 + x = x + 0 = x 

Podczas - i / mają prawo tożsamości, ale jako lewy operatorom asocjacyjnych Neguje (PUN!) Ich wartości. Sensowne jest myślenie o wariancie plus fałd na liście liczb, z początkowym elementem będącym tożsamością, ponieważ matematycznie, nie można tego odróżnić od zwykłego dodawania ich razem jeden po drugim. Co więcej, zagięcie na pustej liście jest tylko tym elementem początkowym, tożsamością.

Jednak od - i / brakuje elementów tożsamości, nie ma rozsądnych domyślnych, aby powrócić.

I to jest częścią R5RS

+0

Division _has_ wartość prawym tożsamości, to '1'. Odejmowanie ma tylko prawą tożsamość: '0'. Mówiąc ściśle, nie są one "pozbawione" elementów tożsamości. –

+2

@ ÓscarLópez Ale podział i odejmowanie pozostają asocjatywne, co sprawia, że ​​nie pasują one do elementów w krotnie. – jozefg

+0

@jozefg lewy asocjacyjny (foldl) lub prawy asocjacyjny fold (foldr) ? –

Powiązane problemy