web-dev-qa-db-ja.com

機能/ Clojureプログラミングの学習-実践的な演習?

私はClojureで関数型プログラミングを学んでいます。どのような実践的な演習をお勧めできますか?ソリューションを備えたオンラインリポジトリは完璧でしょう。

私が考えることができる1つのアイデアは、ソート、ツリー、グラフなどの一般的なアルゴリズムをすべて調べて、それらをClojureに実装することです。それはうまくいくかもしれませんが、それはかなり急で、私はそれを非効率的にする可能性があります(彼女が何をしているのかを知っている人と比較して)。

41
Konrad Garus

プロジェクトオイラーの演習を行うことをお勧めします。

http://projecteuler.net/

プロジェクトオイラーは、解決するために単なる数学的洞察以上のものを必要とする一連の挑戦的な数学的/コンピュータープログラミング問題です。数学はエレガントで効率的な方法に到達するのに役立ちますが、ほとんどの問題を解決するには、コンピューターとプログラミングスキルの使用が必要になります。

多くのプログラマーがプロジェクトオイラーの演習を解決しているため、ソリューションを他の(関数型ではない)プログラミング言語と比較できますが、Clojureソリューションも利用できます: http://clojure-euler.wikispaces.com/ 、したがって、必須と機能的/イディオマティックなClojureを対比することができます。

もちろん、ソリューションを参照せずに、最初に自分で演習を行うことで、最も多くを学ぶことができます。

18
Michiel Borkent

4clojure 最近発売されました。それはFunctionalKoansから多くのインスピレーションを得ており、99のLISPProblemsからいくつかのパズルがあります。しかし、ブラウザだけが必要な学習体験を提供することで、両方が改善されます。

問題の難易度は、 このリストの2番目の要素は何ですか? のような言語チュートリアルから 前の単語とは異なるようにこれらのN個の単語を配置することは可能ですか?)のような示唆に富む質問までさまざまです。最大で1文字 、そしてさらに多くの問題が毎日追加されています。

23
amalloy

99 LISPの問題 を試してください。解決策はclojureにはありませんが、簡単に翻訳できるはずです。

13
sepp2k

私は最近Clojureを自分で学び始めましたが、 labrepl が役に立ちました。

それはあなたが基本とREPLに慣れることを可能にし、多くの演習を含み、あなたが探しているものをまだ知らないのでドキュメントで見つけるのが難しいかなりの非自明なものを説明します。

推奨。

編集

また、 Pythonチャレンジ 、数行のプログラミングで解決できる一連のパズル。パズルの解決策は、次のパズルのためにアクセスするURLを提供します。

特にClojureではありませんが、パズルは非常に面白く、新しい言語のIMHOで足を濡らす良い方法です。 (Pythonに固有のパズルがいくつかありますが、大部分はそうではありません。 Pythonチャレンジヒント のフォーラム)を参照してください。)

Pythonチャレンジは、より実用的で数学指向ではないという点でオイラータスクとは異なります。タスクには、画像のバイトのフィルタリングやプログラムによるハイパーリンクの追跡などが含まれます。

11
j-g-faustus

ClojureにはいくつかのFunctionalKoansがあります: https://github.com/functional-koans/clojure-koans

私はこれらを試すことに慣れていませんが、良いレビューを聞いています。

8
pauldoo

かつてのLISPプログラマーとして、私はClojure Koans https://github.com/functional-koans/clojure-koans が非常に効率的で系統的に健全であることに気づきました。

3つのウィンドウ配置(編集者+評価者+担当者)を使用して、即時のフィードバック、ドキュメントの参照、およびその場での実験を行います。

「チュートリアル」のトピックはよく整理されており、徐々により複雑な資料を紹介しています。少なくともある程度のLISPの経験があれば、確かに良い出発点です。

7
Sax

Githubの clojure.contrib のコードを調べることをお勧めします。

学習の練習としてFP現在Clojureで作業しているアプリを作成することをお勧めしますが、Refやループは使用しないでください。再帰を使用して機能的に問題を解決することに専念してください。 。Refまたはループを使用する必要があると思われる場合は、その理由を説明できることを確認してください。

6
Psyllo

http://exercism.io/ いくつかのそれほど重要ではない演習があり、テストと説明が提供され、ソリューションを送信し、他の人のコードを見てリファクタリングすることを強くお勧めします、それに加えて、サポートされている任意のプログラミング言語で演習を行うことができる多言語です。

他の人が言及しているように、プロジェクトオイラーは始めるのに最適な場所です。しかし、clojureの実装の基礎と理論的根拠を教えてくれる良い本を選んでください。StuartHallowayによるProgrammingClojureが思い浮かびます。

それが終わったら、Timothy Baldridgeがいくつかのビデオチュートリアルを提供し、core.async、トランスデューサー、論理プログラミング、その他たくさんの楽しいものを分析します。 https://tbaldridge.pivotshare.com/

2
Ricardo Acuna

Hackerrankを強くお勧めします。関数型プログラミングドメインがあります: https://www.hackerrank.com/domains/fp/intro

Clojureだけでなく、haskell、scala、erlangなどでスキルをチェックできます。

0
Victor Bashurov