2013-12-18 17 views
6

Sto usando Scheme GNU/MIT:Perché + e * valutano rispettivamente a 0 e a 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. 

Come mai + e * sono entrambi valutati rispettivamente a 0 e 1. E perché valutare - e / genera un errore?

Questa parte della definizione Scheme o è un dettaglio di implementazione in Schema GNU/MIT?

+0

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

risposta

9

Il ragionamento dietro questo è che + e * hanno elementi di identità

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

Mentre - e / hanno identità giusta, ma gli operatori associativi come lasciato questo nega (gioco di parole!) Il loro valore. Ha senso pensare a un variadic plus come una piega su una lista di numeri con l'elemento iniziale che è un'identità dal punto di vista matematico, non è possibile differenziare questo solo aggiungendoli insieme uno per uno. Inoltre, una piega su una lista vuota è solo quell'elemento seme, l'identità.

Tuttavia, poiché - e / mancano elementi di identità, non è possibile restituire un valore predefinito corretto.

Ed è una parte di R5RS

+0

Divisione _has_ un giusto valore-identità, è '1'. La sottrazione ha solo un'identità giusta: '0'. Quindi, a rigor di termini, non "mancano" elementi di identità –

+2

@ ÓscarLópez Ma la divisione e la sottrazione sono associate in modo associativo, rendendole inadatte per elementi in una piega – jozefg

+0

@jozefg a sinistra associativa (foldl) o a destra piega associativa (foldr) ? –

Problemi correlati