2012-06-02 4 views

risposta

43

Rationale

La variante con un braccio di if è stato rimosso dal Racket per evitare errori.

Nel codice funzionale si utilizza sempre la variante a due bracci di if.

(if test expr-on-true expr-on-false) 

Dimenticando il secondo braccio expr-on-false non porterà ad una sintassi errori, ma per un errore di runtime (l'espressione restituirebbe #<void>).

Per evitare questi errori frequenti nel codice funzionale, è stato deciso di introdurre il modulo when per la variante con braccio singolo di if.

(when test expr-on-true) 

Oltre a prevenire errori accidentali, la nuova forma chiaramente indicato ad un lettore di codice, che il codice si basa su effetti collaterali.

codice porting da schema standard Racket

Se si tenta l'esecuzione di codice Scheme in Racket e vedere il messaggio di errore

if: bad syntax (must have an "else" expression) 

è necessario riscrivere l'espressione if a when o unless.

Semplicemente riscrivere:

(if test expr1) to (when test expr1) 

e

(if (not test) expr1) to (unless test expr1).