Derived Forms

Derived forms are built into the normalizer, not user macros: cond, case, and, or, when, unless, let*, named let, do, quasiquote, and guard.

At a glance

LISPEX
(let* ((x 6) (y (+ x 1))) (* x y))

Result

OUTPUT
42

Current guarantees

  • Expansion uses fresh identities and hidden intrinsics, preserving hygiene under user shadowing.
  • Normalization preserves defined tail positions and source diagnostics.
  • guard is a fixed core-facing construct for catchable faults, not a general macro facility.

Normalization surface

Surface formCore strategyPinned boundary
cond / casenested if with fresh temporaries; case uses hidden eqv?tail clause preserved; no cond =>
and / orshort-circuit nested ifsingle final operand remains tail
when / unlessif plus begin or zero-value valuesfalse path returns zero values
named let / dohygienic letrec looprecursive application is tail
quasiquotequote plus hidden constructorsbare unquote outside quasiquote is static E1xx

Boundaries

  • define-syntax, syntax objects, and arbitrary expansion are rejected.