在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或bug的限制吗?这发生在OCaml 3.12.1上(在OS X 10.7.4上,通过GODI bootstrap新安装)。
答案 0 :(得分:4)
此后a known bug已修复。即将发布的4.00版本将不会出现这个问题。
PS:当我发现有关OCaml的可疑事件时,我强烈怀疑这是一个错误,我的技术是使用site:caml.inria.fr/mantis
修饰符进行谷歌搜索,以搜索OCaml错误跟踪器中的类似内容。
答案 1 :(得分:1)
在“普通”OCaml中,您可以(or)
与(||)
互换使用。如果您查看revised syntax的定义,则不支持使用(or)
。您始终需要使用(||)
。也许这是这种变化的副作用?
无论如何,一些快速测试表明(||)
适用于camlp4o。