48

最近は関数型プログラミングに真剣に取り組んでいます。

私は Haskell とそれが提供する可能性に非常に興奮していますが、習得には時間がかかることもわかっています。Haskellの学習方法に関するSOの質問では、実際に「習得」するには数年ではないにしても数か月かかると答えています。

今、私はC、PHP、いくつかのオブジェクト指向のものなどを知っています.Haskellは「現実の世界」ではあまり使われていないと言われました. Haskell は苦労する価値がありますか?

この質問では、なぜ人々は関数型プログラミングがうまくいくと思うのかという結論は、関数型プログラミングが「うまくいく」ということのようです。しかし、確かに手続き型プログラミングはトップにとどまりますよね?

編集: keparo は私の質問をうまく明確にしています:手続き型言語とは対照的に、Haskell と関数型プログラミングのパラダイムを研究することは私にとって価値がありますか?

4

13 に答える 13

20

少なくとも、Haskell の学習が提供する考え方の変化は、職場でまだ使用されている手続き型言語に戻る必要がある場合に役立ちます。

関数型パラダイムは、さまざまな主流のアプリケーションや言語に取り入れられ始めています。C++ でさえ、C++0x に (不自由な) ラムダを追加する予定です。

また、Scala や OCaml などのハイブリッド言語のいくつかを確認することもできます。Scala は Twitter で使用されており、OCaml は Jane's Street の金融取引プラットフォームで使用されています。

于 2009-06-21T19:37:35.847 に答える
11

私が Haskell を学んだのは、Scala、Clojure、OCaml、Scheme の中で試した中で群を抜いて最高の関数型言語だったからですが、それを仕事に使うとは真剣に考えていませんでした。

結局のところ、チームには小さすぎて、Java では時間がかかりすぎるような奇妙な仕事に最適です。これまでのところ、アドホックなデータ移行、つまり CSV エクスポートの別の形式へのマングリング、XML のバッチ変換 (HXT は XSLT よりも簡潔で強力です)、インターネットからのスクリーン スクレイピング、およびモデリングを含むソフトウェア プロジェクトの見積もりに使用してきました。確率モナドを使用してリスクを冒し、バックトラッキングを使用して最適なガント チャートを生成します。これはすべて実行する必要のある実際の作業であり、数日かかる作業になるため、Java で試して実行することさえ気にしませんでした。

テキストエディタでhaskellソースの値のリストを作成するのは、Excelに入力するよりも少し手間がかかるため、漠然と数学的なものにはExcelの代わりに使用しています。Haskell では、バックトラッキングや確率分布など、Excel ではできないあらゆる種類の魔法を実行できます。グラフが必要な場合は、値を CSV (2 行のコード) として吐き出して、Excel に読み込みます。

唯一の欠点は、習熟するまでに数か月かかることですが、努力する価値はあります。

于 2011-02-14T22:07:38.893 に答える
10

Haskell を C ファミリー言語と同じくらい頻繁にプロの設定で使用することを期待するべきではないでしょう。Haskell と関数型プログラミングのパラダイムを研究する価値があるかどうかという質問であれば、答えはイエスです。プログラミングに関する豊富な知識をすべての作業に適用できます。

于 2009-06-21T19:34:55.213 に答える
7

手続き型言語とは対照的に、Haskell と関数型プログラミングのパラダイムを研究することは私にとって価値がありますか?

拡張されたスキル セットを持つことが価値がある場合は、次のようになります。

理解できる利点の 1 つは、並列プログラミングと並行プログラミングです。過去の手続き型言語は、副作用について明確な概念を持たない傾向がありました。その結果、手続き型言語で並列プログラムを正しく作成することは困難でした。関数型言語 (特に、Haskell のような副作用を制限する言語) では、生産的な並列プログラミングについて多くのことが言えます。

そのスキルをあなたの袖に持っていても害はありません。

于 2009-06-21T20:37:35.523 に答える
6

手続き型言語とは対照的に、Haskell と関数型プログラミングのパラダイムを研究することは私にとって価値がありますか?

あなたが惨めになりたくない限り、そうではありません。Luke Plant は、「なぜ Haskell/Python を学ぶとプログラマーが下手になるのか」で次のように述べています。

だから、Python と Haskell を学ぶことで意気消沈し、奇妙で理解しにくいコードを書くようになりました...

(これは完全に冗談ではありません。)

于 2009-06-24T19:15:03.400 に答える
5

関数型プログラミングが、非関数型コードで非常に簡単に使用できる場合、運用環境でプラスになることがわかります。MS が F# を思いついたときも、それを理解できたはずです。

どちらも IL にコンパイルされるため、機能的なアプローチが必要な問題を処理し、手続き型コードでこれらのソリューションを非常に簡単に使用できます。

このようにして、機能コードは、一度に少しずつ本番環境で簡単に道を見つけることができます

したがって、MS のユーザーベースは非常に大きいため、近い将来 F# が普及しなければ、Haskell も普及しないと思います。

于 2009-06-21T19:40:22.253 に答える
4

戦う価値はあると思います。コンピューターがどのように機能するかだけでなく、問題がどのように解決されるかを理解するのに役立ちます。

たぶん、特定の問題の 1 つは Haskell 自体です。純粋な関数型言語として、それは一種の「ハードコア」であり、一方で物事を複雑にすることさえあります。

代わりに、関数型プログラミングは非常に実用的な方法で非常に役立つ場合があります。多くのオブジェクト指向/命令型言語には、この理由で関数型要素が含まれています (Linq、無名関数、読み取り専用値、関数ポインター/デリゲート、型推論)。より少ないコードでより多くを表現できるようにする必要があります (つまり、エラーが発生しにくくなります)。

Scala や F# などの非純粋関数型言語 (標準関数型言語) は、既存の Java または .NET プロジェクトに簡単に統合できるため、必要に応じて両方のパラダイムの利点を組み合わせることができます。関数型言語の典型的な利点については、このスレッドを参照してください。非常に強力な構文解析 (Monadic パーサー コンビネーター / Parsec) や、関数型言語で可能な並行プログラミングについて考えてみれば、それらがいかに便利であるかがわかります。

于 2009-06-24T19:30:28.983 に答える
2

視野を広げることで、現在使用している言語に関係なく、より優れたプログラマーになることができます。たとえば、Lisp マクロを書いた後では、プログラミングを同じように見ることは決してないでしょう。Haskell 用語で考え始めると、高度でない言語で関数を作成し、クロージャーを望んでいることに気付くでしょう。

ラムダ、型推論、クロージャーなどの C# の利点から判断する、Haskell を学習することで、主流言語の明日の最先端に足を踏み入れることができます。

于 2009-06-21T19:37:16.270 に答える
2

Haskell でのプログラミングを楽しんでいる人もいます。自分の環境を選択でき、楽しむことが考慮されている場合は、参加する必要があります。

多くのプログラマーは自分のツールを選択する立場になく、楽しみは彼らの選択の要因ではありません。彼らの多くは職場で「コア プロジェクト ソース」として C/Java/etc を使用するようになりますが、SCons を使用したビルド スクリプトや Java/etc を生成するその他のスクリプトなどの「スクリプト」には Python を選択するか、使用する必要があります。コード、テスト システム、概念実証など。また、他の場所では、「コア プロジェクト」でも Python が使用されています。

8 年後には、Python ではなく Haskell が「あなたの元にやってくる」でしょう。しかし、あなたはそれに早く到達することができます。

于 2009-06-21T19:49:59.113 に答える
1

関数型プログラミングの使用を組み合わせて、言語について実用的にすることができます

JavaScript や Lua などの最新のスクリプト言語はすべて、関数型パラダイムを使用できます。

于 2009-06-30T11:27:43.793 に答える
1

機能的なコンセプトが強くなっています。Ruby をめぐるさまざまな活動と関心に注目してください。最近、単なるブラウザ スクリプト言語を超えて、JavaScript への関心が少し高まっていることにも気付きました。投資した時間は、今年または来年には報われないかもしれませんが、今すぐ飛び込むことでゲームに先んじることができます.

それはあなたの一般的なゲームプランによって異なります。あなたはそれ自体が目的として、または目的を達成するための手段としてプログラミングに興味がありますか? 前者なら、Haskell に夢中。後者の場合は、主流の「雇用可能な」言語に固執してください。Haskell が離陸して急襲するのを待ちます。

于 2009-07-05T20:38:26.553 に答える
0

なぜ手続き型でオブジェクト指向ではなく、手続き型が C 以外で長年使用されていないのか.

商業的に言えば。私なら Java か C# を使います。どちらが高給であるかは問題ではなく、スキルは、Python、Ruby、JavaScript などの他の似たような言語と互換性があります。

Haskell は時間と労力を費やす価値があります。非常にアカデミックであり、一部の銀行はそれを使用していますが、ヨーロッパと英国の多くはコード ベースを F# に移行しています。

私は、FOP が商業的に大きなスピードで動いているとは思いません。しかし、これらのテクニックは、主要な言語に確実に登場しています。特にマルチコア チップの設計では、コードを並列に実行します。

于 2010-10-25T02:29:28.930 に答える