OCamlのfold_left, fold_rightはF#ではfold, foldBackになってますよ、という話
気がつかなくて一生懸命探していたのですよ。F#でOCaml互換のメソッドを呼び出す方法を紹介します。
F# PowerPack
F# PowerPackはFSharp.Core.dllライブラリを補完するライブラリ・ツール群です。
非常に強力なライブラリで、例えば、
- パーサー生成ツール(FSLex.exe, FSYacc.exe)
- OCaml互換ライブラリ(FSharp.PowerPack.Compatibility.dll)
- LINQサポートライブラリ(FSharp.PowerPack.Linq)
といった機能があります。
本日はF# PowerPackのOCaml互換ライブラリを紹介します。
F# PowerPackはFSharp.Coreライブラリから"切り離された"ライブラリであるため、
別個インストールする必要があります。
上記CodePlexからインストーラでもzipでも良いのでダウンロードしてインストールしてください。
参照を追加するライブラリ名は
- FSharp.PowerPack
- FSharp.PowerPack.Compatibility
です。
OCaml互換ライブラリのモジュール名は
です。
これでOCamlライブラリを使う準備は整いました。
例えばこんな風に使えます。
open System open Microsoft.FSharp.Compatibility.OCaml let sum = List.fold_left (+) 0 [1; 2; 3; 4; 5] let rev = List.fold_right (fun x acc -> x :: acc) [1; 2; 3; 4; 5] []
このソースを打ち込んでいただくと解るのですが、OCaml互換ライブラリのメソッドはIntelliSenseが効きません。
IntelliSenseに頼り切った私は、気付くのに時間がかかりました。
さらにビルドするとこんな警告が出ます。
- 警告 FS0062: This construct is for ML compatibility. This F# library function has been renamed. Use 'fold' instead. This message can be disabled using '--nowarn:62' or '#nowarn "62"'.
- 警告 FS0062: This construct is for ML compatibility. This F# library function has been renamed. Use 'foldBack' instead. This message can be disabled using '--nowarn:62' or '#nowarn "62"'.
これはそのままですね。
メソッドより前のソースコードに#nowarn "62"と記述するか、
ビルドオプション([プロジェクト]を右クリック->[プロパティ]->[ビルド]->[その他フラグ])に--nowarn:62と記述すれば警告は消えますよ。