私は C# プログラマーであり、関数型プログラミングと宣言型プログラミングに関するいくつかの素晴らしい議論を経てきました。私はどちらも苦手だと思っています:Pなので、prologとhaskellの学習を始めようと思っていました。そうすることの実現可能性について提案してください。もし私が F# を学べば、Haskell を学ぶ意味はありますか? これらの言語は、より優れた C# プログラムを作成するのに役立つ、どのような資質を提供してくれるでしょうか?
8 に答える
最初に命令型からオブジェクト指向に移行したときのように、関数型プログラミングを扱うには、物事の考え方を再配線する必要があります。すべての要点を理解するまで、最初はハイブリッドな方法で物事を行う傾向があります。あなたは C# のバックグラウンドを持っているので、F# を試してみることをお勧めします。.net 言語は、使い始めるのに十分な共通のフレームワークを共有しているため、はるかに早く慣れる可能性が高いからです。
つまり、Prolog と Haskell に直接移行することは悪い考えではありませんが、C# と F# の間の飛躍と比較すると、最初に言語のさまざまな構文とライブラリに適応する必要があるかもしれません。個人的には、 RealWorldHaskellとThe Craft of Functional Programmingの 2 冊の本で C#/Java から Haskell に移行しましたが、うまくできたので、そうできない理由はありません。:)
F# と Haskell は異なるため、F# を学習してから Haskell を学習するには、まだいくつかの作業が必要です。最初は「不純」であり、2 番目は「純粋」です。不純とは、状態や IO などの特定の「副作用」が本質的に許可されていることを意味します。一方、純粋とは、それらをすぐに取得するのではなく、特定のメソッド (モナドなど) を使用する必要があることを意味します。C# から来て、F# を試してから Haskell の原因を試す方がおそらく簡単でしょう。
私は、(個人的な意見ですが) より優れた C# プログラマーになりたいのであれば、F# と Haskell (またはその他のこと) について学ぶことは決して悪いことではないと信じています! 特にC#と統合できるF#の場合。関数型プログラミングは、特定のことを容易にする可能性があり、特に他の人が言ったように、関数型言語プログラムへの現在の傾向があるように見えるため、遅かれ早かれ役立つ可能性があることを知っています。
Reg Braithwaite が承認した「言語 X から学んだことは、言語 Y を使用するときに私をより良いプログラマーにする」という形式の投稿を書くことができなかった言語 X はほとんどありません。
C# 自体は、ラムダ式やSystem.Linq
拡張メソッドなど、多くの関数構造を蓄積しているため、関数型の考え方を学ぶことは、日常業務の言語を最大限に活用するだけでなく、それ自体が楽しいものになるのに間違いなく役立ちます。たまたま、Erlang は C# の後で私が手にした最初の関数型/パターン マッチング言語でしたが、それだけで、自分の C# スタイルと問題へのアプローチ方法を再検討するのに十分でした。
FP は次の大きなものになりつつあり、学習に最も適した言語を調べて決定する言語が不足することはありません。Haskell、Erlang、そして新しい F#、Scala、Clojure はすべてこの波に乗っています。
C# のような命令型言語から関数型プログラミングを学ぶのは非常に難しく、まったく新しい考え方です (少なくとも私にとっては、関数型言語の方が理解しやすいと思うかもしれません! 脳の働き次第です ;))
F# は CLR にあるため、適切な選択です。つまり、C# コードから記述した F# ライブラリを簡単に使用できます。
通常、F# は "関数" (数学) 問題により適しています。
C# コードのいくつかの複雑なアルゴリズムを F# で書き直して、より高速で簡潔にすることを検討しています。
アーメドが述べているように。問題を新しい方法で考える方法を学ぶことは、有益なだけです。
私は新しい言語を学ぶことを決して傷つけることはありません. 引用をぶっ飛ばしますが、要点は「思考の書き方を知らなければ、その思考の考え方もわからない」というものでした。自然言語の文脈での話でしたが、プログラミング言語にも当てはまると思います。
Prolog と Haskell と Tinker を少し見てみましょう。少なくとも、ベルトにツールが追加されます。
機能的および論理的(宣言的)プログラミングは別のプログラミングパラダイムであり、別の観点から考えています。
ただし、どちらのパラダイムも、C# を使用したコーディングに直接影響を与えることはありませんが、問題自体を考えている場合は間接的である可能性があります。
最初はプロローグを学び始めた方が良いという意見をここで見たことがあります。私は個人的に同意しません。関数型プログラミングは、他の言語でできることに近いものです。たとえば、C++ では、関数型プログラミングの観点 (stl アルゴリズム、boost::bind、boost::lambda など) から来る多くのアプローチがあります。C# はわかりませんが、同じことが起こると言われました。
したがって、関数型言語から始める方が簡単だと思います。私は個人的に haskell、scheme、prolog を知っています。そして、検索、ルールなどにまたがる統合からすぐに始めると、少し頭がおかしくなるかもしれないと思います (少なくとも私の場合は ;-) )。繰り返しますが、単なる意見です...
2 つのうちのほうが簡単なので、プロローグから始めます。新しいパラダイムを感じさせてくれます。次に、haskell または f# を使用します。
一般的に c# および .net と互換性のあるライブラリを簡単に作成できるため、haskell よりも f# をお勧めします。
これらの言語のいずれかを学ぶことが、より優れた C# プログラマーになるのに役立つとは思いません。C# でのプログラミングの練習に時間を費やしていました。