layout/switch
Symbol: layout/switch
Use-case: Multi-way equality dispatch in block syntax. Lowers to switch
clause lists consumed by compile/switch.
Behaviour: Does not accept peers. Header must be exactly
switch VALUE: (one value expression). Inner case and else blocks are
expanded by default layout/block (flat splice). layout/switch validates
each child and emits:
(switch VALUE (COND-LIST BODY...) ... (else: BODY...))
Rules:
body entries must be
caseorelseblocks onlycaserequires exactly one condition argument and it is passed through as the case’s condition list expressionelsetakes no argumentsonly one
elseis allowedcasecannot appear afterelseempty body is allowed and lowers to
(switch VALUE)
Syntax:
switch VALUE:
case COND-LIST:
BODY
case COND-LIST2:
BODY
else:
BODY
Examples:
switch x:
case [1]:
"one"
case [2 3]:
"two-or-three"
else:
"meh"
;; -> (switch x ([1] "one") ([2 3] "two-or-three") (else: "meh"))
switch x:
case [1]:
"one"
;; -> (switch x ([1] "one"))
Also: special form switch.