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

发布于 2024-09-16 02:21:19 字数 270 浏览 6 评论 0原文

是否有一个 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

该示例取自使用 Objective Caml 开发应用程序:)

谢谢。

Is there an OCaml equivalent to Haskell's pattern matching on an arbitrary number of arguments? For example, can I have something resembling:

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

(The example's lifted from Developing Applications with Objective Caml :)

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

没有心的人 2024-09-23 02:21:19

您不能像这样匹配多个参数,但可以匹配元组,因此您可以这样做:

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)

You can't match multiple arguments as such, but you can match tuples, so you can do:

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

If you're ok with the function taking its arguments as a tuple you can also use function like this:

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文