【发布时间】:2011-05-19 19:33:23
【问题描述】:
我经常需要匹配应该具有相同构造函数的值元组。包罗万象的_,_ 总是在最后结束。这当然是脆弱的,任何添加到该类型的额外构造函数都将编译得非常好。我目前的想法是让匹配项连接第一个但不是第二个参数。但是,还有其他选择吗?
例如,
type data = | States of int array
| Chars of (char list) array
let median a b = match a,b with
| States xs, States ys ->
assert( (Array.length xs) = (Array.length ys) );
States (Array.init (Array.length xs) (fun i -> xs.(i) lor ys.(i)))
| Chars xs, Chars ys ->
assert( (Array.length xs) = (Array.length ys) );
let union c1 c2 = (List.filter (fun x -> not (List.mem x c2)) c1) @ c2 in
Chars (Array.init (Array.length xs) (fun i -> union xs.(i) ys.(i)))
(* inconsistent pairs of matching *)
| Chars _, _
| States _, _ -> assert false
【问题讨论】:
标签: functional-programming pattern-matching ocaml