Functional programming OCaml“;加上;模式匹配中的保护

Functional programming OCaml“;加上;模式匹配中的保护,functional-programming,pattern-matching,ocaml,pattern-guards,Functional Programming,Pattern Matching,Ocaml,Pattern Guards,我读过关于图案防护装置的文章,上面显示了这种防护装置: match x with | pat with g = y -> z | ... | pat with g = y -> z 但是,在OCAML4.02中,它似乎不起作用(语法错误:预期模式。),因此问题是:在模式匹配中是否有一种解决方法来实现这种绑定? 我想写这样的东西 match something with | value with y = f x when y > 0 -> value + y 提前感谢,

我读过关于图案防护装置的文章,上面显示了这种防护装置:

match x with
| pat with g = y -> z
| ...
| pat with g = y -> z
但是,在OCAML4.02中,它似乎不起作用(
语法错误:预期模式。
),因此问题是:在模式匹配中是否有一种解决方法来实现这种绑定? 我想写这样的东西

match something with
| value with y = f x when y > 0 -> value + y

提前感谢,干杯。

本页介绍从未实际合并到编译器中的
ocaml模式
功能。目前,OCaml没有活动模式。

这是OCaml“模式”CamlP4语法扩展。OCaml本身没有模式保护,该p4扩展作为语法扩展提供,在将其提供给OCaml编译器之前,必须由CamlP4预处理器消除语法保护

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

最近,我为pattern guards编写了一个PPX扩展,它与4.02.1:一起工作。您的示例可以翻译为:

match something with
| value when [%guard let y = f x;; y > 0] -> value + y
它看起来比“模式”更难看,但在PPX中,我们必须在普通语法中使用一些属性和扩展,如
[%guard…]