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

时间:2010-08-28 22:29:21

标签: pattern-matching ocaml

在任意数量的参数上是否存在与Haskell模式匹配相当的OCaml?例如,我可以有类似的东西:

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

(使用Objective Caml开发应用程序解除了这个例子:)

感谢。

1 个答案:

答案 0 :(得分:15)

您无法匹配多个参数,但您可以匹配元组,因此您可以执行以下操作:

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)