1

バニラの OCaml では、他のすべての(or)関数と同じように 2 項関数な(+)ので、次のようなコードは問題なく動作します。

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修飾子を使用してGoogle検索を実行し、OCamlバグトラッカーで類似のコンテンツを検索することです。

于 2012-06-21T22:32:01.647 に答える
1

(or)「通常の」OCaml では、 と同じ意味で使用できます(||)改訂された構文の定義を見ると、 の使用は(or)サポートされていません。常に使用する必要があります(||)。おそらく、これはその変更の副作用でしょうか?

いずれにせよ、いくつかの簡単なテストでは(||)、camlp4o で動作することが示されています。

于 2012-06-21T18:52:18.253 に答える