Песочница

Условия и производные формы

Небольшое ядро из `if`, последовательности, связывания, lambda, применения, присваивания и quote получает гигиенически нормализованные производные формы.

Когда это нужно

Выбирайте условную форму по вопросу: один выбор «да/нет», несколько предикатов, сравнение одного значения с фиксированными данными или односторонний эффект. Ложным является только #f.

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

LISPEX
(case 2 ((1) 'one) ((2) 'two) (else 'other))

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

OUTPUT
two

Разбор примера

case один раз вычисляет 2, сравнивает его с каждым указанным значением через eqv? и выбирает вторую ветвь. Результатом становится цитированный символ two; ветвь else не выполняется.

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

  • cond, case, and, or, when, unless, let*, именованный let, do и quasiquote сохраняют закреплённый порядок и хвостовые позиции.
  • Сгенерированные временные имена и скрытые intrinsics нельзя захватить или затенить пользовательскими именами.
  • case сравнивает datum через eqv?; ложные пути when и unless дают ноль значений.

Быстрый выбор

ФормаКогда применятьПоведение результата
ifровно две ветвивозвращает выбранную ветвь
condнесколько предикатов описывают случаивозвращает первую подходящую ветвь
caseодно значение сравнивается с фиксированными даннымивычисляет ключ один раз
and / orнужна короткая остановка цепочкивозвращает значение операнда, а не приведённый Boolean
when / unlessнужен односторонний эффектложный путь даёт ноль значений

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

Нет define-syntax и пользовательского расширения макросов.

Текущие границы

  • Отдельные unquote и unquote-splicing вне quasiquote — статические ошибки.

Куда дальше

Повседневные формы разбираются в уроке о данных и решениях, а точная нормализация — в справочнике производных форм.

Данные и решения · Производные формы