良い最初の関数型プログラミングプロジェクトは何でしょうか?[閉まっている]


19

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

私は独身のプロジェクトを成功させたいと思っており、機能的なプログラミングプロジェクトを終えたいと思っています。私たちは学校で勉強しませんでしたが、新しいことを自分で学ぼうとすることをお勧めします。 。

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

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

関数型プログラミングを始めるときに最初から最適な言語を提案することも歓迎します。


1
「どの言語を選択するべきか」とプロジェクト選択の質問はどちらもここではトピック外です。詳細については、FAQおよびこのメタディスカッションを参照してください。
アダムリア

回答:


10

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

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

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

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

  • あなたが本当に挑戦をしたい場合は、コンピュータゲームを書いて試すことができます...ゲームは持っているので、これは難しい課題であることに注意して巨大な関数型プログラミングスタイルで管理するのが難しいことができる可変状態の量を。あなたがモナドなどについて知りたいと思った以上に学ぶことを期待してください。

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

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

以下を使用して基本を簡単に試すことができます。

  • 4Clojureオンライン問題セット-早期の問題は良いとして機能Clojureの言語への導入を「行うことによって学びます」
  • http://www.try-clojure.org/のオンラインClojure REPL

それは私の質問すべてに答えたので、私は質問に対するあなたの答えを選びました。お時間をいただきありがとうございます。
ミーム

HaskellにもSTMがあります;(
代替案

@mikera:JVMを操作するために、ABCLを試しましたか?私はそれを試し、小さな例を作成しましたが、ほとんど経験がありません。(私のToDoリストにはClojureの本もありますが、これは別の話です。ABCLとJavaの使用経験があれば興味があります)。
ジョルジオ

@Giorgio:ABCLは、JVMでのCommon Lispの適切な実装のようです。OTOH Clojureには、JVM向けに設計されているという利点があり、より「現代的な」革新を取り入れ、コミュニティの勢いを増しています。Common Lispの後方互換性の維持を気にするかどうかにかかっていると思います。
ミケラ

9

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

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

凝りたくて、JVMを対象とするより最新の関数型言語を使用する場合は、Clojureをご覧ください。Clojure専用のSICPの適応バージョンもあります。

SICPのテキストに目を通すと、関数型プログラミングが特定の種類のタスクに非常に適している理由がわかります。また、この演習は本格的なプロジェクトを刺激するかもしれません。Clojureルートに行くことを選択し、既存のプロジェクトを調べたい場合は、ここにいくつかのリンクがあります


本のリンクを提供していただきありがとうございます。これを読んで理解を深めていきます。
ミーム

今日、SICPを読みましたか?
-MattyD

3

定量分析

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

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


高レベルでは、機能的な方法で多くのことを実行できることは確かに真実です。例えば、人々は関数型言語を使用して、エキゾチックなオプションのペイオフを説明しています。しかし、PCAの計算、非線形方程式の解法などのように、基礎的なものに進むにつれて、アルゴリズムはますます反復的になり、古いスタイルでコーディングする方がよいでしょう。
quant_dev

1
私の経験では、定量分析はすべて、一連のアルゴリズムを実行することについてだとは言いません。私はC#で定量的なものを実装しました、それは非常に多くのもののポートフォリオ理論の一種のため、少なくとも、LINQに合わせた
Homde

アルゴリズム自体の実装はどうですか?
quant_dev

ほとんどの場合、問題はありませんか?シャープレシオを計算し、最初にリターンシリーズから年間リターンを計算し、次にその値をリスクフリーレートとボラティリティで使用します:(annualizedReturn-riskFreeRate)/ボラティリティ。関数型言語で処理できないものはありませんでした
Homde

モデルキャリブレーションの価格設定はどうですか?
quant_dev

3

有利なスタートを切るには、F#で小さなブラックジャックゲームを実装してみてください。これは、この短いビデオチュートリアルで割り当てられた宿題プロジェクトです。解決策はネットでも提供されています(ビデオの1つでも)。


2

OCamlを使用して、schemeまたはlispのインタープリターを作成できます。


また、これに関するhaskellの記述方法に関するhaskellの本もあります。
代替

2

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


デンマークではマイクロソフトのすべてが人気があるため、私は主にF#について考えていましたが、さまざまな意見を読むほど、この決定を疑っています。主にパラダイムを習得するのに役立つ言語が必要です。必要に応じて、または必要に応じて別の言語を学ぶのは難しくないと確信した後です。
ミーム

あなたがどこにいて何をするかに強く依存します。私たちにとって、マイクロソフトのプログラミングテクノロジーは、メインプラットフォームをサポートしていないため、役に立ちません。ただし、F#を使用する場合は素晴らしいですが、新しいF#固有の質問を開きます。

私はそれを使いたくありません。まだ決定していません。とにかく使用する言語についての質問は二次的なものでした。
ミーム

その場合は、プロジェクトを見つけて、それを解決する方法を提案してください。たとえば、Prologは決定木検索に最適です。Haskellはパターンマッチングに最適です。Lispは、データに応じて実行時にLispプログラムを構築および操作するのに最適です。

0

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

たとえば、Fregeプログラミング言語プロジェクトでは、やるべきことが多くあります。たとえば、ベースHaskellライブラリの移植を気にすることができます。これにより、作業中にHaskellのエキスパートのようになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.