En standard Scheme es posible escribir¿Por qué falta un "si" con un brazo en Racket?
(if (> x 2)
(set! x (- x 1)))
pero esto no es posible en la raqueta - Raqueta de if
siempre requiere de dos brazos. ¿Por qué?
En standard Scheme es posible escribir¿Por qué falta un "si" con un brazo en Racket?
(if (> x 2)
(set! x (- x 1)))
pero esto no es posible en la raqueta - Raqueta de if
siempre requiere de dos brazos. ¿Por qué?
Fundamento
La variante de un solo brazo de if
se eliminó de raqueta para evitar que los insectos.
En el código funcional uno siempre usa la variante de dos brazos de if
.
(if test expr-on-true expr-on-false)
olvido del segundo brazo expr-on-false
no daría lugar a una sintaxis de errores, pero a un error de tiempo de ejecución (la expresión volvería #<void>
).
Para evitar estos errores frecuentes en el código funcional, se decidió introducir el formulario when
para la variante de un brazo de if
.
(when test expr-on-true)
Además de prevenir errores accidentales, la nueva forma indicaron claramente a un lector de código, el código que se basa en los efectos secundarios.
código de Portabilidad del esquema estándar para raqueta de
Si intenta ejecutar código de Scheme en la raqueta y ver el mensaje de error
if: bad syntax (must have an "else" expression)
debe volver a escribir la expresión if
a when
o unless
.
Simplemente vuelva a escribir:
(if test expr1) to (when test expr1)
y
(if (not test) expr1) to (unless test expr1).