4.12 简单分派:case

case 形式通过匹配一个表达式的结果和某个从句的值来分派到该从句:

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

每个 datum 都会使用 equal?expr 的结果相比较, 之后其对应的 body 就会被求值。case 形式可以在 O(log N) 的时间内从 Ndatum 中分派到正确的从句。

每个从句可支持多个 datum,其对应的 body 会在任何 datum 被匹配到时求值。

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

5

'many

case 形式的最后一个从句可使用 else,与 cond 类似:

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

'one

对于更加通用的模式匹配(但没有分派时间的保证),请使用 match 它在 Pattern Matching 中有所介绍。