在普通的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的一个限制,还是一个bug?这发生在OCaml 3.12.1 ( OS X 10.7.4上,通过GODI bootstrap新安装)上。
发布于 2012-06-22 06:32:02
这是已修复的a known bug。即将发布的4.00版本将不会有这个问题。
PS:当我发现一些关于OCaml的可疑东西,我强烈怀疑这是一个错误,我的技术是使用site:caml.inria.fr/mantis修饰符在谷歌搜索,以在OCaml错误跟踪器中搜索类似的内容。
发布于 2012-06-22 02:52:18
在“普通”OCaml中,您可以将(or)与(||)互换使用。如果您查看revised syntax的定义,就会发现不支持使用(or)。您始终需要使用(||)。也许这是这种变化的副作用?
无论如何,一些快速测试表明(||)可以与camlp4o一起工作。
https://stackoverflow.com/questions/11144107
复制相似问题