emi*_*tti 4 ocaml functional-programming pattern-matching pattern-guards
我在code.google.com上阅读了关于模式保护的内容,其中显示了这种类型的警卫:
match x with
| pat with g = y -> z
| ...
| pat with g = y -> z
Run Code Online (Sandbox Code Playgroud)
然而,在OCaml 4.02中,似乎没有工作(Syntax error: pattern expected.),所以问题是:在模式匹配中有一种解决方法可以实现这种绑定吗?我想写那样的东西
match something with
| value with y = f x when y > 0 -> value + y
Run Code Online (Sandbox Code Playgroud)
在此先感谢,欢呼.
这是OCaml"模式"CamlP4语法扩展.OCaml本身没有模式保护,这个p4扩展提供了它作为语法扩展,在提供给OCaml编译器之前,它必须被CamlP4预处理器去掉.
不幸的是,"模式"没有被移植到OCaml 4.我不确切知道为什么,但可能是由于改变OCaml内部表示的高移植成本.CamlP4非常强大,但它的语法扩展很难编写和维护.实际上,OCaml社区现在转向另一个预处理器框架PPX.PPX不能改变OCaml语法本身,但事情要容易得多.
最近我为模式保护编写了一个PPX扩展,它与4.02.1一起使用:https://bitbucket.org/camlspotter/ppx_pattern_guard .您的示例可以转换为:
match something with
| value when [%guard let y = f x;; y > 0] -> value + y
Run Code Online (Sandbox Code Playgroud)
它看起来比"模式"更丑,但在PPX中我们必须在vanilla语法中使用一些属性和扩展名[%guard ...].
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |