gpt4 book ai didi

pattern-matching - OCaml 中的 "as"关键字

转载 作者:行者123 更新时间:2023-12-04 00:38:16 25 4
gpt4 key购买 nike

this site 上提供的 OCaml 教程的答案中,一些解决方案,包括用于消除列表元素的连续重复的解决方案,是这样编写的:

let rec compress = function
| a :: (b :: _ as t) -> if a = b then compress t else a :: compress t
| smaller -> smaller;;
a :: (b:: _ as t) 行的相关性是什么? ?为什么我不能写成 a :: b :: t反而?

最佳答案

关键字as将名称绑定(bind)到全部或部分模式。 一旦绑定(bind),就可以使用名称来代替它所代表的模式。在您的“压缩”功能中,t绑定(bind)到模式 b :: _ .
一次t是绑定(bind)的,它可以在后续的表达式中使用,就像在“compress”函数的其余部分一样。
as名称绑定(bind)从左到右发生,与大多数语言不同(C 的 typedef 除外)。另外,::似乎比 as 具有更高的优先级.

因此,(b :: _ as t)相当于((b :: _) as t) .对于那些习惯于从右到左绑定(bind)的人来说,这可能会让人感到困惑。请注意 a :: (b :: _) as t将绑定(bind)整个模式a :: b :: _t ,由于上面提到的优先级。

引用:

  • http://caml.inria.fr/pub/docs/manual-ocaml/patterns.html#hevea_manual.kwd7
  • http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora016.html .
  • 关于pattern-matching - OCaml 中的 "as"关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com