Песочница

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

Производные формы встроены в 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 / unlessif с begin или values без значенийложный путь даёт ноль значений
именованный let / doгигиенический цикл letrecрекурсивное применение хвостовое
quasiquotequote и скрытые конструкторыотдельный unquote вне quasiquote даёт статическую E1xx

Границы

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