如何在任意数量的参数上进行模式匹配?

问题描述:

是否有一个OCaml等价于Haskell在任意数量参数上的模式匹配?例如,我可以有类似的东西:如何在任意数量的参数上进行模式匹配?

merge [] lst = lst 
merge lst [] = lst 
merge l1 @ (n : ns) l2 @ (m : ms) = 
    if n < m then n : merge ns l2 else m : merge l1 ms 

(在这个例子的从目的CAML :)

由于开发应用程序解除。

+1

我不会说你的例子需要任意数量的参数,函数只需要两个参数。 – adamse 2010-08-28 22:40:09

+0

adamse:true,但我的问题适用于采用多个参数的任何函数。 – 2010-08-28 22:48:30

不能匹配多个参数本身,而是你可以匹配元组,所以你可以做:

let rec merge l1 l2 = match l1, l2 with 
| [], lst 
| lst, [] -> lst 
| (n::ns), (m::ms) -> if n < m then n :: merge ns l2 else m :: merge l1 ms 

如果你确定使用功能考虑它的参数,你也可以使用一个元组function是这样的:

let rec merge = function 
| [], lst 
| lst, [] -> lst 
| (n::ns as l1), (m::ms as l2) -> if n < m then n :: merge (ns, l2) else m :: merge (l1, ms)