web-dev-qa-db-ja.com

F#対Haskell対LISP-学習する言語は?

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

私はほとんどC#/。NETの背景を持っているので、私の最初の選択はF#を学ぶことです(.NETとVisual Studioの知識があるため)。一方、F#にはLISPマクロやHaskell高次関数などの機能があるのでしょうか。

F#、Haskell、Lispを比較できますか?どれがあなたの選択の言語になりますか?

43
empi

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

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

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

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

43
Robert

一度同じ質問をした

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

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

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

27
Peter

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

17
Tony The Lion

F#はわかりませんが、ときどき遊んでみたいです。私の言語は非常に機能的でCLRでも機能するClojureですが、JVMバージョンがメインバージョンです。

それはあなたが望むものの多くをあなたに上書きします。 F#との主な違いは、Clojureは動的に型指定されており、同時実行性を処理する方法が本当に優れていることです(私が言う最高のものの1つです)。

ところで。 HaskellがCLRで実行するのが難しいためにF#が作成されたことをご存知ですか? (もちろんそれだけではなく、その一部です)

8
nickik

「F#にLISPマクロやHaskellの高次関数などの機能があるかどうかは疑問です」

F#はマクロを提供しません。また、それはより高い種類のタイプを提供しません(これは私が最初に尋ねていたと思っていたものです)。

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

8
Justin

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

私の意見では、Scheme(LISPバリアント)と [〜#〜] sicp [〜#〜] を読むことが正しいことです。あなたはたくさん学びます。

しかし、実用的な目的のため、そしてあなたが.NET開発者であれば、おそらくF#がより良いでしょう。

8
Arve

なぜ選ぶのですか? LISPとHaskellの両方を自分で学びます。自分の時間でF#を学習しても意味がありません。あなたが仕事でそれを必要とするなら、あなたは仕事でそれを学ぶでしょう;)

編集:男は楽しみのために学ぶために言語を見ていました。まあ、LISPとHaskellは良い楽しみの候補です。彼は(可能性は低いですが)職場でF#を使用する機会がある(彼はMSショップにいる)ので、仕事でそれを学んで給料を受け取ることができる自由な時間に何かを学ぶ理由。

6
Marko

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

.NETには、Nice Schemeの実装-IronSchemeがあります。私の記事 " Playing with IronScheme "を見て、気に入ったかどうかを確認してください。

5

この3つの言語を比較する場合は、Haskellをお勧めします。 (型システムであるため)LISPよりも実用的で、F#よりも強力で賢いです。あなたが知る限り、F#はOCamlの.NETポートであり、HaskellやOCamlのようにある程度は理屈的に明確ではありません。 HaskellまたはOCamlを研究して、F#がいかに不便かを知ることをお勧めします。

4
Kakadu