но это невозможно в Racket - Racket if всегда требуется два оружия. Почему?
Ответ 1
Обоснование
Одноразовый вариант if был удален из Racket для предотвращения ошибок.
В функциональном коде всегда используется двухрукий вариант if.
(if test expr-on-true expr-on-false)
Забытие второго плеча expr-on-false не приведет к синтаксической ошибке, а к ошибке выполнения (выражение вернет #<void>).
Чтобы предотвратить появление этих часто встречающихся ошибок в функциональном коде, было принято решение ввести форму when для однорукого варианта if.
(when test expr-on-true)
Помимо предотвращения случайных ошибок, новая форма четко указывает читателю кода, что код зависит от побочных эффектов.
Портирование кода из стандартной схемы в Racket
Если вы попытаетесь запустить код схемы в Racket и увидите сообщение об ошибке
if: bad syntax (must have an "else" expression)
вы должны переписать выражение if на when или unless.