【问题标题】:how to pattern match on an arbitrary number of arguments?如何对任意数量的参数进行模式匹配?
【发布时间】:2010-08-28 22:29:20
【问题描述】:

在任意数量的参数上是否有等效于 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 开发应用程序:)

谢谢。

【问题讨论】:

  • 我不会说您的示例采用任意数量的参数,该函数恰好采用两个参数。
  • adamse:是的,但我的问题适用于任何采用多个参数的函数。

标签: pattern-matching ocaml


【解决方案1】:

你不能像这样匹配多个参数,但你可以匹配元组,所以你可以这样做:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2013-12-15
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多