質問
F#はOCamlから派生していますが、欠落しているまたは追加されている主要なアイテムは何ですか?具体的には、OCamlの学習に利用できるリソースが、F#を学習したい人にとっても有用かどうかについて興味があります。
解決
主な違いは、F#がサポートしていないことです:
- ファンクター
- OCamlスタイルのオブジェクト
- 多相バリアント
- camlp4 / 5プリプロセッサまたは拡張ポイント(ppx)
さらに、F#には、ラベル付きパラメーターとオプションのパラメーターの構文が異なります。
理論上、これらの機能を使用しないOCamlプログラムはF#でコンパイルできます。 OCamlの学習は、F#の完全に合理的な入門書です(逆もまた同様です)。
違いの完全なリストはこちら(注:archive.orgのデッドリンクの置き換え)。
他のヒント
この質問はしばらく前から回答されていますが、ほとんどの回答がF#でOCaml機能が欠落していることを示していることに非常に驚きました-これは、既存のOCamlプログラムをF#(おそらく参照された記事のほとんどの動機です)。ただし、F#を別の言語(OCaml for .NETの限定バージョンだけではありません!)にする多くの機能があります。F#に追加されたいくつかの事項を次に示します。
- 測定単位。これにより、数値計算を処理するコードを型チェックできます 引用を使用した
- メタプログラミング(F#でLINQを使用できるようにし、WebSharperプラットフォームなどのプロジェクトを承認するためにも不可欠です) 機能的データ型の抽象化を作成するための
- アクティブパターン(およびより複雑なパターンマッチングアプリケーションには一般的に非常に便利な機能)
- 計算式は、非同期ワークフロー(非同期I / O / Webサービス/ GUIプログラミング用のライブラリ)の背後にある言語機能です
- .NET互換オブジェクトシステム。.NETプラットフォームとの完全な相互運用を可能にします(OCamlもオブジェクトをサポートしていますが、異なる-もちろん両方のシステムにいくつかの利点があります)。
- オーバーロードされた演算子-私の知る限り、OCamlにはオーバーロードされた演算子はありません-F#では、すべての数値型とその型に対して
+
を使用できますサポートしてください。
そして、正直なところ、Visual Studio IDEに言及する価値があると思います。これは言語の一部ではありませんが、ユーザーエクスペリエンスを本当に向上させます(Visual StudioのIntelliSenseサポートは本当に優れています!)
リストを見ると、F#の人気に大きく貢献しているものがたくさんあるため、「ファンクターなしのOCaml」だけではありません。 F#は間違いなくOCamlに基づいており(Haskellなどの他の言語のアイデアを取り入れています)、多くの側面を共有していますが、他にもたくさんあります。非同期ワークフロー、.NETスタイルのオブジェクト指向、メタプログラミングなどがなければ、Microsoft Developer DivisionはVisual Studio 2010にF#を含めることはないでしょう。
F#をOCamlのいとことして常に説明します。OCamlにはF#にはない多くの機能があり、取得される可能性は低いためです。 F#は、以前のCAML言語とより密接に関連しています。特に、F#では抽象化のサポートが非常に限定されており、構造型指定はサポートされていません(OCamlのオブジェクトおよび多形バリアント)すべて。
一部の回答者が書いたものとは異なり、F#はラベル付き(" named")およびオプションの引数を(制限付きで)サポートしています。
ただし、これらはすべて高度な機能であり、OCamlに関するリソースを使用して、小規模なOCamlスタイルの関数型プログラミングの背後にある基本的なアイデアを理解することができます。最初に発見する主な違いは、カプセル化や抽象化などの大規模な問題であり、OCamlとF#ではまったく異なる方法で解決されます。 F#でそれを行う方法を学びたい場合、利用可能な文献は純粋に機能的なデータ構造に関するこの記事。
また、OCamlの素晴らしいモジュールシステムを使用すると、型(データ構造など)でコードを簡単にパラメーター化できることがわかりましたが、OOPの代替手段は恐ろしいだけでなく、.NETではほとんど使用されません。さらに、エレガントにパラメーター化されたデータ構造を記述しようとすると、F#コンパイラーで多数のバグに遭遇しました。 F#stdlibにはいくつかの優れたデータ構造の実装が含まれていますが、実質的に再利用されていません。つまり、カットアンドペーストジョブです。
F#とOCamlは、MLファミリの言語の分類学上のクラスであり、他の奇妙な動物の完全なパスルも含まれています。 F#はOCamlよりも新しく、ファンクターもありません[モジュールの機能->モジュール]または行タイプ[オブジェクトクラスとポリモーフィックバリアント]はまだです。これら2つの単純化により、おそらく.Netプラットフォームで開発している人にとって学習曲線が容易になります。残念なことに、これら2つの言語機能はOCamlで非常に強力であるため、OCamlの資料を読んでF#のコーディング方法に関する洞察を得ると、おそらく両方が利用可能なC#の優れた代替手段であるF#の早期のフラストレーションにつながります。
F#は、OCaml構文を直接サポートします。 100%互換性はないかもしれませんが、かなり近いと思います。
http://plus.kaist.ac.kr/ 〜shoh / fsharp / html / index.html
ここに相違点のリストがあります(最新であるかどうかはわかりません)
http://plus.kaist。 ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html