ropa - racket traduccion
¿Por qué falta el "si" de un solo brazo en la raqueta? (1)
En el esquema estándar es posible escribir
(if (> x 2)
(set! x (- x 1)))
pero esto no es posible en Racket - Racket''s if
siempre requiere dos brazos. ¿Por qué?
Razón fundamental
La variante de un solo brazo de if
se eliminó de Racket para evitar errores.
En el código funcional uno siempre usa la variante de dos brazos de if
.
(if test expr-on-true expr-on-false)
Olvidar el segundo brazo expr-on-false
no llevaría a un error de sintaxis, sino a un error de tiempo de ejecución (la expresión devolvería #<void>
).
Para evitar estos errores frecuentes en el código funcional, se decidió introducir el formulario when
para la variante de un solo brazo de if
.
(when test expr-on-true)
Además de prevenir errores accidentales, el nuevo formulario indica claramente a un lector de código que el código se basa en efectos secundarios.
Código de transferencia del esquema estándar a la raqueta
Si intenta ejecutar el código Scheme en Racket y ve el mensaje de error
if: bad syntax (must have an "else" expression)
debe volver a escribir la expresión if
when
o a unless
.
Simplemente reescriba:
(if test expr1) to (when test expr1)
y
(if (not test) expr1) to (unless test expr1).