4.12 简单分派:case
case 形式通过匹配一个表达式的结果和某个从句的值来分派到该从句:
(case expr [(datum ...+) body ...+] ...)
每个 datum 都会使用 equal? 与 expr 的结果相比较, 之后其对应的 body 就会被求值。case 形式可以在 O(log N) 的时间内从 N 个 datum 中分派到正确的从句。
每个从句可支持多个 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 类似:
例如:
对于更加通用的模式匹配(但没有分派时间的保证),请使用 match 它在 Pattern Matching 中有所介绍。