1

在 vanilla OCaml 中,(or)它是一个二进制函数,就像(+)所有其他函数一样,所以这样的代码可以正常工作:

let any (truths:bool list) = List.fold_left (or) false truths

但是在任何加载 camlp4o 的环境中,这都无法解析:

Error: Parse error: ")" or "module" or [expr] expected after "(" (in [expr])

同时,(+)其他整数算术运算符在任一环境中继续按预期工作:

let sum (nums:int list) = List.fold_left (+) 0 nums

为什么是这样?这是camlp4o的限制还是错误?这发生在 OCaml 3.12.1 上(在 OS X 10.7.4 上,通过 GODI 引导程序全新安装)。

4

2 回答 2

4

这是一个已知的错误,此后已修复。即将发布的 4.00 版本不会有这个问题。

PS:当我发现我强烈怀疑是错误的 OCaml 可疑内容时,我的技术是使用site:caml.inria.fr/mantis修饰符进行谷歌搜索,以在 OCaml 错误跟踪器中搜索类似内容。

于 2012-06-21T22:32:01.647 回答
1

在“普通”OCaml 中,您可以(or)(||). 如果查看修改后的语法定义,(or)不支持使用。你总是需要使用(||). 也许这是这种变化的副作用?

无论如何,一些快速测试表明它(||)适用于camlp4o。

于 2012-06-21T18:52:18.253 回答