z | ... | pat wit-6ren">
gpt4 book ai didi

functional-programming - OCaml "with"保护模式匹配

转载 作者:行者123 更新时间:2023-12-05 01:01:54 27 4
gpt4 key购买 nike

我在 code.google.com 上阅读了有关模式保护的信息这显示了这种类型的 guard :

match x with
| pat with g = y -> z
| ...
| pat with g = y -> z

然而,在 OCaml 4.02 中,似乎不起作用( Syntax error: pattern expected.),所以问题是:有一种解决方法可以在模式匹配中实现这种绑定(bind)吗?
我想写这样的东西
match something with
| value with y = f x when y > 0 -> value + y

提前谢谢,干杯。

最佳答案

这就是 OCaml“模式”CamlP4 语法扩展。 OCaml 本身没有模式保护,并且此 p4 扩展将其作为语法扩展提供,在馈送到 OCaml 编译器之前,必须由 CamlP4 预处理器对其进行脱糖。

不幸的是,“模式”没有移植到 OCaml 4。我不知道确切原因,但可能是由于更改 OCaml 内部表示的移植成本很高。 CamlP4 非常强大,但它的语法扩展很难编写和维护。实际上,OCaml 社区现在正在转向 PPX,另一个预处理器框架。 PPX 不能更改 OCaml 语法本身,但那里的事情要容易得多。

最近我为 4.02.1 的模式防护写了一个 PPX 扩展:https://bitbucket.org/camlspotter/ppx_pattern_guard .您的示例可以翻译为:

match something with
| value when [%guard let y = f x;; y > 0] -> value + y

它看起来比“模式”更难看,但在 PPX 中,我们必须使用带有一些属性和扩展的原版语法,例如 [%guard ...] .

关于functional-programming - OCaml "with"保护模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386116/

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