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