Tho*_*ood 10 ocaml pattern-matching
是否有一个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
Run Code Online (Sandbox Code Playgroud)
(这个例子来自使用Objective Caml开发应用程序:)
谢谢.
sep*_*p2k 16
你不能匹配多个参数,但你可以匹配元组,所以你可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
如果您对该函数将其参数作为元组使用,那么您也可以使用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)
Run Code Online (Sandbox Code Playgroud)