web-dev-qa-db-ja.com

最初の優れた関数型プログラミングプロジェクトは何でしょうか?

最初の優れた関数型プログラミングプロジェクトは何でしょうか?

私は学士号プロジェクトの強打で仕上げたいと思っており、関数型プログラミングプロジェクトで仕上げたいと思っています。学校では勉強していませんでしたが、自分で新しいことを学ぶように心がけています。新しいパラダイムを学ぶことは、新しい言語だけでなく、教師にとっても興味深いことだと思いました。 。

問題は、夏休みを利用して関数型プログラミングをよりよく理解し、1つの言語に慣れるために、プロジェクトの少し前に開始したいことです。

少しやりがいのある優れた実践プロジェクトだと思いますが、言語やパラダイムなども学ぶことができます。それから、私の学士プロジェクトとしては、どのようなプロジェクト(より高度なプロジェクト)になると思いますか。

関数型プログラミングに入るときに、最初に最適な言語を提案していただければ幸いです。

19
Meme

一般に、比較的数学的または論理的なものを使用する方が簡単です。関数型プログラミング言語は、特定の入力から出力への何らかの変換を表すアプリケーションに適しています。

難易度の大まかな順序でいくつかのアイデア:

  • 遺伝的アルゴリズム-ソリューションを単純なDSLで表す特定のタスクへのソリューションを進化させるプログラムを記述します。 2Dグリッドで食べ物を探し、さまざまな種類の戦略を進化させる小さなボットを構築する前に、楽しみました

  • コンビネーターの解析-より高次の関数を使用して任意の言語のパーサーを構築できるようにする parser combinator ライブラリを構築します。

  • 本当に挑戦したい場合は、コンピューターゲームを作成してみてください...ゲームには巨大な量の可変状態があり、トリッキーになる可能性があるため、これはトリッキーなタスクであることに注意してください関数型プログラミングスタイルで管理します。モナドなどについてあなたが知りたかった以上のことを学ぶことを期待してください...

実用的な関数型言語としてClojureをお勧めします。私はこれを約18か月間使用しており、その選択に非常に満足しています。主な理由は次のとおりです。

  • Concurrency-ClojureにはすばらしいSTMシステムがあり、私の見解では、現時点でマルチコアの同時実行に最適な言語です。次のビデオをご覧ください http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey これがなぜ特別なのかを理解したい場合
  • これはLISPです-「コードはデータである」という哲学があるため、マクロベースのメタプログラミング(プログラムを書くプログラム、遺伝的アルゴリズムなど)には最適です。 )
  • 実用的な関数型プログラミング-Clojureスタイルは非常に機能的です(高次関数、遅延シーケンスなどに重点を置いています)が、Haskellのように完全に純粋ではありません。 mtableの状態と副作用を処理するための素敵なツールがたくさんあります
  • Dynamic-Clojureはデフォルトで動的言語です。これは生産性を大幅に向上させます。ただし、静的型付けのパフォーマンス上の利点が必要な場合は、後で静的型ヒントをオプションで追加できます。
  • 完全にコンパイルされています-Clojureコードは常にコンパイルされているため( "eval"を実行した場合でも)、かなりまともなパフォーマンスが得られます。使用しました。
  • JVMエコシステムのすべてのライブラリとツールに無料でアクセスできます。利用可能なライブラリが非常に限られている学術言語とは異なり、Javaユニバース内のあらゆるものにかなり簡単にアクセスできます

以下を使用すると、基本を非常に簡単に試すことができます。

  • 4Clojure オンラインの問題セット-初期の問題は、Clojure言語への「実践的な学習」の導入として役立ちます
  • オンラインClojure REPL at http://www.try-clojure.org/
10
mikera

特定のプロジェクトについて考える前に、関数型プログラミングの基礎を学ぶことから始めて、適切なプロジェクトのタイプをよく理解できるようにします。

始めるのに最適な場所はおそらく コンピュータプログラムの構造と解釈 (SICP)で、LISPのScheme方言に基づいています。これは古典的なCSテキストであり、全文はオンラインで入手できます(リンクあり)。

凝ったものにして、JVMをターゲットとするより現代的な関数型言語を使用したい場合は、Clojureをご覧ください。 SICP 特にClojure用 の適応バージョンもあります。

SICPのテキストを検討すると、関数型プログラミングが特定のタイプのタスクに非常に適している理由がわかります。この演習は、本格的なプロジェクトのきっかけとなる可能性があります。 Clojureルートを使用することを選択し、いくつかの既存のプロジェクトを調べたい場合は、いくつかの優れたリンク here があります。

9
Jason Lewis

定量分析

ファイナンスがやや興味深い場合、関数型プログラミングでクオンツなものを実行することは非常にアルゴリズム的であるため、良い一致です。私はポートフォリオ理論や、シャープやソルティーノの比率などについて話しています。ファンドのリターンを分析し、さまざまな統計や図表などを提供するアプリを作成します。

F#をお勧めするのは、F#を使い始めるのが簡単な関数型言語であり、優れたツールと優れたフレームワークを備えているからです。他の選択肢はLISPとclojureですが、それらを学ぶのは少し難しいです。

3
Homde

有利なスタートを切るには、F#で小さなブラックジャックゲームを実装してみることができます。これは、この間に割り当てられた宿題プロジェクトです 短いビデオチュートリアル 。ソリューションは、ネット上(およびビデオの1つ)でも提供されています。

3
knb

OCamlを使用してスキームまたはLISPのインタープリターを作成できます。

2
davidk01

どの関数型言語を考えていましたか。それぞれに異なる特徴があります。私に最も大きな影響を与えた1つの言語はHaskellでした。私も同じようにすることをお勧めします。

2
user1249

いくつかのオープンソースプロジェクトに貢献することもできます。

たとえば、 Fregeプログラミング言語 プロジェクトでは、やらなければならないことがたくさんあります。たとえば、ベースのHaskellライブラリの移植を気にすることができます。これにより、Haskellの専門家のようになります。

0
Ingo