Производные формы встроены в normalizer, а не являются пользовательскими макросами: cond, case, and, or, when, unless, let*, именованный let, do, quasiquote и guard.
Кратко
LISPEX
(let* ((x 6) (y (+ x 1))) (* x y))Результат
OUTPUT
42Текущие гарантии
- Раскрытие использует свежие идентичности и скрытые intrinsics, сохраняя гигиену при пользовательском затенении.
- Нормализация сохраняет определённые хвостовые позиции и диагностику исходника.
guard— фиксированная конструкция для перехватываемых ошибок, а не общая система макросов.
Поверхность нормализации
| Surface-форма | Стратегия ядра | Закреплённая граница |
|---|---|---|
| cond / case | вложенный if со свежими именами; case использует hidden eqv? | хвост ветви сохранён; нет cond => |
| and / or | короткозамкнутый вложенный if | последний операнд остаётся хвостовым |
| when / unless | if с begin или values без значений | ложный путь даёт ноль значений |
| именованный let / do | гигиенический цикл letrec | рекурсивное применение хвостовое |
| quasiquote | quote и скрытые конструкторы | отдельный unquote вне quasiquote даёт статическую E1xx |
Границы
define-syntax, синтаксические объекты и произвольное расширение отвергаются.