F#はOCamlから派生していますが、欠落しているまたは追加されている主要なアイテムは何ですか?具体的には、OCamlの学習に利用できるリソースがF#を学習したい人にとっても有用かどうかについて興味があります。
主な違いは、F#がサポートしていないことです。
さらに、F#には、ラベル付きパラメーターとオプションのパラメーターに対して異なる構文があります。
理論的には、これらの機能を使用しないOCamlプログラムはF#でコンパイルできます。 OCamlの学習は、F#の完全に合理的な入門書です(逆もまた同様です)。
相違点の完全なリストは here (注:archive.orgのデッドリンクの置き換え)です。
この質問はしばらく前から回答されていますが、ほとんどの回答がF#にOCaml機能が欠けていることを示していることに非常に驚きました-これは、既存のOCamlプログラムをF#参照された記事のほとんどの動機)。ただし、F#を別の言語(OCaml for .NETの限定バージョンだけでなく!)にする多くの機能があります。ここにF#に追加されたものがいくつかあります。
+
を使用できます。そして、正直なところ、Visual Studio IDEに言及する価値があると思います。これは言語の一部ではありませんが、ユーザーエクスペリエンスを向上させます(Visual StudioでのIntelliSenseサポートは非常に優れています!)
リストを見ると、F#の人気に大きく貢献しているものがたくさんあるので、単なる「ファンクターなしのOCaml」以上のものです。 F#は間違いなくOCamlに基づいており(Haskellなどの他の言語のアイデアを取り入れています)、多くの側面を共有していますが、他にもたくさんあります。非同期ワークフロー、.NETスタイルOO、メタプログラミングなど)がなければ、Microsoft Developer DivisionはVisual Studio 2010にF#を含めないでしょう。
OCamlにはF#にはない多くの機能があり、決して実現されることはないので、私は常にF#をOCamlのいとことして説明します。 F#は以前のCAML言語とより密接に関連しています。特に、F#では抽象化のサポートが非常に限定されており、構造型付けはサポートされていません(OCamlの objects や polymorphic variant など)。
一部の回答者が書いたことに反して、F#はラベル付き(「名前付き」)およびオプションの引数を(制限付きで)サポートしています。
ただし、これらはすべて高度な機能であり、OCamlに関するリソースを使用して、小規模なOCamlスタイルの関数型プログラミングの背後にある基本的なアイデアを確実に把握することができます。最初に発見する主な違いは、カプセル化や抽象化などの大規模な問題であり、OCamlとF#ではまったく異なる方法で解決されます。 F#でそれを行う方法を学びたい場合、利用可能な文献は 純粋に機能的なデータ構造に関するこの記事 のみです。
また、OCamlの素晴らしいモジュールシステムを使用すると、型(データ構造など)でコードを簡単にパラメーター化できることも発見しましたが、OOPの代替は恐ろしいだけでなく、。エレガントにパラメータ化されたデータ構造を書き込もうとすると、F#コンパイラで多数のバグが発生します。 「ジョブを貼り付けます。
F#とOCamlは、MLファミリーの言語の分類学上のクラスです。これには、他の奇妙な動物も含まれています。 F#はOCamlよりも新しく、ファンクター[モジュールの機能->モジュール]も行タイプ[オブジェクトクラスと多相バリアント]もまだありません。それらの間で、これらの2つの単純化は、おそらく.Netプラットフォームで開発している人にとって学習曲線を容易にします。悲しいことに、これらの2つの言語機能はOCamlで非常に強力であるため、OCamlの文献を読んでF#のコーディング方法に関する洞察を得ることは、おそらく両方が利用可能なC#の優れた代替手段であるF2の早期のフラストレーションにつながる可能性があります。
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