2010-12-14 14 views
10

私はSchemeに徹底的に興味を持ち、いくつかのおもちゃのプログラミング例で始まり、Paul GrahamのOn Lispを読んでいます。オブジェクト指向プログラマー向けのスキーム

私が見つけられなかったことは、Schemeを "OO people"に教えることを目的とした本やウェブサイトです。つまり、自分のようなC++/Java/Pythonで99%のコーディングを行った人です。

私は、クロージャはオブジェクトyの一種であり、ローカルステートを持ち、そのステートにアクセスできる1つ以上の関数を提供しているという意味です。しかし、私は既存の習慣をそこに移植するためだけにスキームを学びたくありません。これが私が今Common LispではなくSchemeを学んでいる理由です。 CLOSは私の既存のOOの習慣に松葉杖として役立つかもしれないと私は恐れる。

理想的なのは、OO言語とSchemeyの両方で解決された問題のケーススタディを提供する本またはウェブサイトです。私は、科学計算やコンピュータグラフィックスの問題に最も感謝していると思いますが、何かがするでしょう。

いずれの教育的リードも高く評価されます。

+3

私はあなたがそのようなことを見つけるとは思わない。ほとんどの人が新しい言語を学ぶとき、彼らはその言語の観点からそれを学びます。さらに、OOPは機能よりはるかに複雑です。チェックしてください* Little Schemer *または* SICP * –

+2

CLOSが古い習慣の松葉杖として役立つのではないかと疑いますが、C++/Java/PythonのOOスタイルとはかなり違っていて、とても面白いと感じました。私はすべての詳細を理解していませんが、Peter Seibelの_ Practical Common Lisp_をお勧めします。あなたが_ Lisp_をあまり読むことなく読んでいるなら、あなたは[PCLでCLOSを紹介する章](http://gigamonkeys.com/book/object-reorientation-generic-functions.html)に潜入することができます。また、JavaとCommon Lispを比較した彼の[Google Tech Talk](http://www.youtube.com/watch?v=VeAdryYZ7ak)をお勧めしたいと思います。 – spacemanaki

+1

@Rafe私のOO思考パターンを移植することなく、独自の視点からSchemeを学習する私の投稿を読むことは、まさに私がやろうとしていることです。私はOOとSchemeのソリューションの例を同じ問題に見て、このプロセスをブートストラップすることを望んでいます。 – SuperElectric

答えて

11

私はCLOSが古い習慣の松葉杖として役立つのではないかと疑いますが、C++/Java/PythonのOOスタイルとはかなり違っていて、非常に面白いと感じました。私はすべての詳細を理解していませんが、Peter SeibelのPractical Common Lispをお勧めします。 を読んでいる場合は、Lispに大きな問題はなく、PCLのthe chapters introducing CLOSにダイビングすることができます。また、私は彼のGoogle Tech Talk JavaとCommon Lispを比較することをお勧めしたいと思います。

古典的なテキストStructure and Interpretation of Computer Programsはクロージャを(使用したモジュラーシステムを構築する第3章でかなりの数の例をカバーし、状態や可変性を導入して問題に対処します。ここでは

は、このより本格的な答え作るためにいくつかのより多くの勧告です)。第2章では、CLOSの学習の動機付けに役立つ一般的なデータ型指向プログラミングを紹介します。この本は本当に紹介は必要ありませんが、それは崇高な作品です。私は春からゆっくりと読んでいます。あなたがSchemeに興味があるなら強くお勧めします。

SICPは素晴らしい本ですが、それはその欠陥がないわけではないのです。これらの本当に面白い表情はSICPのいくつかの批判について詳しく説明エッセイ"The Structure and Interpretation of the Computer Science Curriculum"で、プログラムを(設計する方法の著者によって書かれています私はHTDPを読んでいないが、それはとても良いと聞いている)。このエッセイでは、あなたが探しているものを具体的に教えるわけではありませんが、機能とOOプログラミングを比較すると、とにかく面白いです。彼らの新入生の学部のコースはScheme(私は思う、PLT/Racket)を使った関数型プログラミングの最初の学期の導入から始まり、OOプログラミングのC++やJavaに続きます...少なくともそれはエッセイで述べるコースです。

ピーター・ノーヴィグからこれらのスライドは、オブジェクト指向プログラミングにおける一般的なデザインパターンのいくつかを解決し、なぜ彼らはスキームとLispのような動的、関数型言語ではないか、または不要なさを示しています。http://norvig.com/design-patterns/

私は慎重にで本をお勧めしますLittle Schemerの書籍と同じ著者:リトルJava、いくつかのパターン。私はこれが本当に良い本であるかどうかを確かめることはできませんが、それは信じられないほど奇妙で、実際に悪い組版の決定があります(イタリック、セリフ、可変幅、上付き文字はプログラミング上のテキストには含まれません)しかし、それを見て興味深いかもしれません。とにかく安いかもしれません。この勧告を真剣に受けないでください。私はSchemeのテキストに固執する方が良いと思います。

p.s.関数型プログラミングはオブジェクト指向プログラミングでは複雑ではないと言ったひとつのコメントには同意しなければならない。私はそれが大雑把に間違っていると思う。あらゆる機能プログラミングは、本当に心配です。あなたがmap/filter/reduceとfirst-classの機能を超えて、怠惰な評価、副作用や突然変異を避ける、強固な静的型の言語など、機能領域の他の要素を見てみると、確かに、伝統的なオブジェクト指向プログラミングと同じくらい複雑です。私は表面だけを傷つけただけですが、新しいアイデアがたくさん見つかりました。プログラミングは、OOか機能かにかかわらず、複雑なビジネスです。

4

おめでとう、私の友達!愛cs、機能プログラミングを愛する。あなたがPythonの開発者であれば

それはここスキーム

に考えるように3-4日かかり、私が今まで私がこのコースhttp://cs.gettysburg.edu/~tneller/cs341/scheme-intro/index.htmlを発見し、それが役に立つかもしれhttp://www.shido.info/lisp/idx_scm_e.html

を満たしている最高のシンプルチュートリアルですあなたのために

2

Schemeで始める場合は、How to Design Programsをご覧ください。本書では、問題解決のための "Schemey"アプローチを紹介します。私はOOと同じプログラミング問題の機能的な解決策を比較する本はないと思います。しかし、nice presentationがあり、Schemeのような動的言語が、静的に型定義されたOOP言語で複雑なデザインパターンを必要とする問題に対してどのように簡単な解決策を提供できるかを示しています。

3

初心者の方には非常に役に立ち、非常に役立つ初心者のリソースは"The Adventures of a Pythonista in Schemeland"です。 PythonプログラマーがSchemeの第一歩を踏み出すという観点から書かれています(明らかに)。これは、現在の実装の概要と、各スキーム実装間の互換性の問題が含まれていることです。残念ながら、ちょうど出発時に頭痛を引き起こす可能性があります。システムオブジェクトに関して

、これらtwodocumentshereからリンクされている)が、私は状態をキャプチャでの使用を理解する上で役に立ったクロージャを使用して非常にシンプルなおもちゃの実装の素敵な例を与えます。

+0

Pythonistaのリンクは非常にクールです、ありがとう! – SuperElectric

関連する問題