2012-06-21 52 views
1

在香草OCaml中,(or)是一個二元函數就像(+)和所有其它的,所以像這樣的代碼工作正常:爲什麼camlp4o無法解析(或)爲二元函數?

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引導新安裝)。

回答

1

在「正常」OCaml中,您可以使用(or)(||)互換。如果您查看revised syntax的定義,則不支持使用(or)。您始終需要使用(||)。也許這是這種變化的副作用?

無論如何,一些快速測試表明(||)與camlp4o一起使用。

4

這是自修改後的a known bug。即將發佈的4.00版本不會有這個問題。 PS:當我發現一些可疑的OCaml,我強烈懷疑它是一個bug時,我的技術是使用site:caml.inria.fr/mantis修改器進行谷歌搜索,以搜索OCaml bugtracker中的相似內容。

相關問題