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 case or else blocks only

  • case requires exactly one condition argument and it is passed through as the case’s condition list expression

  • else takes no arguments

  • only one else is allowed

  • case cannot appear after else

  • empty 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.