Вопрос по – Почему однорукое «если» отсутствует в ракетке?

28

Встандартная схема можно написать

(if (> x 2)
    (set! x (- x 1)))

но это невозможно в Racket - Racket 'sif всегда требует двух рук. Зачем?

Ваш Ответ

1   ответ
46

Rationale

Однорукий вариантif был удален из ракетки, чтобы предотвратить ошибки.

В функциональном коде всегда используется двурукий вариантif.

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

Забыть вторую рукуexpr-on-false не приведет к синтаксической ошибке, но к ошибке времени выполнения (выражение вернет#<void>).

Чтобы предотвратить эти часто встречающиеся ошибки в функциональном коде, было решено ввести формуwhen для однорукого вариантаif.

 (when test expr-on-true)

Помимо предотвращения случайных ошибок, новая форма четко указывает читателю кода, что код зависит от побочных эффектов.

Porting code from standard Scheme to Racket

Если вы попытаетесь запустить код Схемы в Racket и увидите сообщение об ошибке

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

Вы должны переписатьif выражение дляwhen или жеunless.

Просто перепишите:

(if test expr1)    to    (when test expr1)

а также

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

Похожие вопросы