Песочница

Производные формы

Производные формы встроены в нормализатор, а не являются пользовательскими макросами: `cond`, `case`, `and`, `or`, `when`, `unless`, `let*`, именованный `let`, `do`, quasiquote и `guard`.

Проверьте запуском

LISPEX
(let* ((x 6) (y (+ x 1))) (* x y))

Наблюдаемый результат

OUTPUT
42

Как рассуждать

  • Раскрытие использует свежие идентификаторы и скрытые встроенные операции, сохраняя гигиену при пользовательском затенении.
  • Нормализация сохраняет определённые хвостовые позиции и диагностику исходника.
  • guard — фиксированная конструкция для перехватываемых ошибок, а не общая система макросов.

Поверхность нормализации

Поверхностная формаСтратегия ядраЗакреплённая граница
cond / caseвложенный if со свежими именами; case использует скрытый eqv?хвост ветви сохранён; варианта cond => нет
and / orвложенный if с короткой остановкойпоследний операнд остаётся хвостовым
when / unlessif с begin или values без значенийложный путь даёт ноль значений
именованный let / doгигиенический цикл letrecрекурсивное применение хвостовое
quasiquotequote и скрытые конструкторыотдельный unquote вне quasiquote даёт статическую E1xx

Частая ошибка

define-syntax, синтаксические объекты и произвольное расширение отвергаются.

Куда дальше

Держите эту страницу рядом при написании кода. За последовательным объяснением вернитесь к карте синтаксиса или соответствующей главе.

Синтаксис одним взглядом · Путь обучения