44

関数型プログラミング言語について多くのことを聞いたことがあり、それを学びたいと思っています。主に楽しみのためだと思いますが、プログラミングスキルが向上することを願っています。

私は主にC#/。NETのバックグラウンドを持っているので、最初の選択肢はF#を学ぶことです(.NETとVisual Studioに精通しているため)。一方、F#にはLispマクロやHaskellの高階関数などの機能があるのではないかと思います。

F#、Haskell、Lispを比較していただけますか?どちらがあなたの選択する言語になりますか?

4

9 に答える 9

45

F#は私の選択した言語ですが、それらすべてを学ぶことを強くお勧めします。それらはすべてまったく異なり、それ自体が興味深いものです。それぞれの概要を次に示します(おそらくわずかなF#バイアスがあります)。グーグルで簡単に詳細情報を見つけることができます。

F#-機能的なスタイルで簡単にプログラミングできる言語であり、オブジェクトを変更するのではなく、簡単にコピーできます。また、タプルや代数的データ型などの興味深いデータ型、パターンマッチングやリスト内包表記などの便利な言語構造も提供します。また、任意の.NET Frameworkコンポーネントを使用できるため、OOおよび必須の機能とライブラリへの良好なアクセスがあります。

Haskell-純粋で怠惰な関数型言語であり、珍しい、あるいはユニークな獣を作ります。これは、モナドによって追跡されない限り、副作用がまったくないことを意味します。Haskelにも、タプル、代数的データ、およびパターンマッチングがあります。

Lisp-F#とHaskellは静的に型付けされますが、lispは動的に型付けされます。多くの括弧を使用する独特の構文があり、プログラム自体に変換を行って構文を拡張できる興味深いマクロ機能を提供します。

于 2010-02-10T12:40:37.573 に答える
28

私は一度同じ質問をしました

それ以来、F#でプログラミングを行ってきました。C#でLINQを理解することは本当に役に立ち、それが私の経歴でもあったので、今はとてもうれしく思います。(F#を学んだので、C#でforeachを使用することはほとんどありません)

私はF#を通じて、怠惰な評価、リスト、シーケンスについて多くのことを学びました。これらはすべて、リストやタプルなどを適切にサポートする任意の言語を選択できますが(私が推測する関数型言語のように)、F#を選択すると、これらはすべてC#でも非常に役立ちます。たぶん、あなたはすでにこれらすべてを知っていて、それを正しく使用していますが、そうでない場合は、F#を選択してください。

私はここから始めました:非常に素晴らしいビデオチュートリアル、非常に印象的で非常に刺激的な家庭教師。

于 2010-02-10T12:36:13.003 に答える
18

現在、関数型プログラミングの基本について、チャンネル9でこれらのビデオを視聴しています。Haskellを使用して説明されていますが、基本はすべての言語に適用されます。私はそれが非常に有益で理解しやすいと言わなければなりません。

于 2010-02-10T12:33:12.193 に答える
8

私は F# を知りませんが、時々それで遊ぶのが好きです。私の言語は非常に機能的で CLR でも動作する Clojure ですが、JVM バージョンがメイン バージョンです。

それはあなたが望むものの多くを超えています。F# との主な違いは、Clojure が動的に型付けされ、並行性を処理する方法が非常に優れていることです (私が言うには最高の方法の 1 つです)。

ところで。F# が作られたのは、Haskell を CLR で実行するのが難しかったからです。(もちろん、それはすべての話ではなく、その一部です)

于 2010-06-14T13:53:21.400 に答える
8

これは非常に主観的な質問です。

私の意見では、Scheme (Lisp バリアント) とSICPを読むことは正しいことです。あなたは多くを学ぶでしょう。

しかし、実用的な目的で、.NET 開発者であれば、F# の方が優れているかもしれません。

于 2010-02-10T12:42:46.607 に答える
8

「F# には Lisp マクロや Haskell 高階関数のような機能があるのだろうか」という特定の質問に実際に答えた人は誰もいません。

F# はマクロを提供しません。また、それは高次の型を提供しません (これは私があなたが最初に尋ねていると思っていたものです)。

F# は、関数を受け取って関数を返す関数を簡単に記述できるという点で、高階関数を提供します。Func実際、デリゲートは .NET フレームワークの一部であるため、C# (または実際には任意の .NET 言語) でこれを行うことができます。

于 2011-07-22T18:18:15.330 に答える
7

なぜ選ぶのですか?Lisp と Haskell の両方を独学で学びましょう。ただし、自分の時間に F# を学習しても意味がありません。仕事で必要な場合は、仕事で学ぶことができます ;)

編集:その男は楽しみのために学ぶために言語を見ていました。まあ、Lisp と Haskell は良い候補です。なぜなら、それらが使用されるのは楽しいことだけだからです (そこには有給の仕事はありません)。彼は職場で F# を使用する機会が "あるかもしれません" (可能性は低いですが) (彼は MS ショップにいます)。

于 2010-02-10T13:51:57.207 に答える
5

私はそれらすべてを異なる程度で学びました.Scheme(Lispの方言)から始めることをお勧めします.Schemeが最も簡単に習得できるからです. Haskell と F# は静的に型付けされており、これは実際のプロジェクトにとって大きな利点ですが、私見では、構文が少し「多すぎる」ため、Scheme ほど簡単に理解することはできません。

.NET の優れたスキーム実装である IronScheme があります。私の記事「IronScheme で遊ぶ」を見て、気に入るかどうかを確認してください。

于 2010-02-10T15:20:40.577 に答える
5

この 3 つの言語を比較するなら、Haskell をお勧めします。LISP よりも実用的で (型システムであるため)、F# よりも強力で賢いと思います。あなたが知る限り、F# は OCaml の .NET ポートであり、Haskell や OCaml がイデオロギー的に明確ではありません。Haskell や OCaml を勉強して、F# がいかに不便かを知ることをお勧めします。

于 2012-07-12T07:04:51.780 に答える