4.12 Simple Dispatch: case🔗ℹ

The case form dispatches to a clause by matching the result of an expression to the values for the clause:

(case expr
  [(datum ...+) body ...+]
  ...)

Each datum will be compared to the result of expr using equal?, and then the corresponding bodys are evaluated. The case form can dispatch to the correct clause in O(log N) time for N datums.

Multiple datums can be supplied for each clause, and the corresponding bodys are evaluated if any of the datums match.

Example:
> (let ([v (random 6)])
    (printf "~a\n" v)
    (case v
      [(0) 'zero]
      [(1) 'one]
      [(2) 'two]
      [(3 4 5) 'many]))

5

'many

The last clause of a case form can use else, just like cond:

Example:
> (case (random 6)
    [(0) 'zero]
    [(1) 'one]
    [(2) 'two]
    [else 'many])

'zero

For more general pattern matching (but without the dispatch-time guarantee), use match, which is introduced in Pattern Matching.