У меня есть три ответа на ваш вопрос.
1 Не делайте этого
У каждого языка есть правила, соглашения и прагматика. Ваш опыт использования Racket будет болезненным, если вы попытаетесь заставить его выглядеть как C / C ++. Вы будете тратить время на подобные проблемы вместо того, чтобы учиться думать в модели программирования Racket и использовать инструменты, разработанные Racket для этой модели.
Для конкретного примера c Racket имеет правило, что форма (выражение, определение, объявление и т. д. c) начинается с оператора (например, display
или list
или +
) или syntacti c, ключевое слово (например, define
или if
). Это правило устраняет множество сложных проблем, которые мешают расширению синтаксиса. Например, что будет приоритетом инфиксного синтаксиса против других специальных форм; в (lambda ? 5)
, это форма lambda
или (плохая) форма ?
?
Чтобы уточнить: Racket настоятельно рекомендует вам расширить язык с помощью новых форм syntacti c в пределах границ S-выражения, оператор-первый синтаксис.
2 Частичное решение
Считыватель Racket имеет ограниченную форму поддержки "инфиксного синтаксиса". Если вы поместите точки вокруг одного термина в группу в скобках, читатель переместит заключенный термин в начало. Таким образом, следующие два термина считываются читателем одинаково:
(1 . < . 2)
(< 1 2)
Таким образом, вы можете написать
(#t . ? . "Hello")
Лично я думаю, что это обычно затрудняет чтение кода.
3 Открытое исследование topi c
Люди проводят исследования по расширению структуры построения языка Racket для работы с синтаксисами, не основанными на S-выражениях. Одним из примеров является Хону; см. статью "Хону: Syntacti c Расширение для алгебры c Обозначения через Enforestation . Есть и другие, а topi c все еще открыт.