Проверьте запуском
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, синтаксические объекты и произвольное расширение отвергаются.
Куда дальше
Формы, в которые они переписываются, собраны на странице основных форм, а выбор между условиями разобран в руководстве.