2010-12-14 7 views
10

Ich bin völlig von Scheme fasziniert, und habe mit einigen Spielzeug-Programmierbeispielen begonnen und lese durch Paul Grahams On Lisp.Schema für objektorientierte Programmierer

Eine Sache, die ich nicht finden konnte, ist ein Buch oder eine Website, die Scheme an "OO people" vermitteln soll, d. H. Leute wie ich, die 99% ihrer Programmierung in C++/Java/Python gemacht haben.

Ich sehe, dass Verschlüsse sind Art von Objekt-y, in dem Sinne, dass sie lokalen Zustand haben, und bieten eine oder mehrere Funktionen, die Zugriff auf diesen Zustand haben. Aber ich will Scheme nicht nur lernen, meine bestehenden Gewohnheiten darauf zu portieren. Deshalb lerne ich gerade Schema statt Common Lisp; Ich befürchte, dass CLOS nur als eine Krücke zu meinen bestehenden OO-Gewohnheiten dienen könnte.

Was wäre ideal ein Buch oder eine Website, die Fallstudien von Problemen bietet, die sowohl in einer OO-Sprache als auch in Schema auf eine schemetische Weise gelöst werden. Ich nehme an, ich würde wissenschaftliche Computer- und/oder Computergrafikprobleme am meisten schätzen, aber alles würde tun.

Alle pädagogischen Leads würden sehr geschätzt werden.

+3

Ich glaube nicht, dass Sie so etwas finden werden. Wenn die meisten Menschen eine neue Sprache lernen, versuchen sie, sie aus der Perspektive dieser Sprache zu lernen, nicht aus einer anderen Sprache. Außerdem ist OOP viel komplizierter als funktional. Check out * The Little Schemer * oder * SICP * –

+2

Ich bezweifle, CLOS würde als eine Krücke für alte Gewohnheiten dienen, fand ich es ziemlich anders als der OO-Stil in C++/Java/Python, und sehr interessant. Ich verstehe nicht alle Details, aber ich würde Peter Seibels _Practical Common Lisp_ empfehlen. Wenn Sie _On Lisp_ ohne große Probleme lesen, sollten Sie in der Lage sein, [die Kapitel, die CLOS in PCL vorstellen] (http://gigamonkeys.com/book/object-reorientation-generic-functions.html) zu tauchen. Außerdem würde ich seinen [Google Tech Talk] (http://www.youtube.com/watch?v=VeAdryYZ7ak) empfehlen, der Java und Common Lisp vergleicht. – spacemanaki

+1

@Rafe Wenn Sie meinen Beitrag lesen, dass das Lernen von Scheme aus seiner eigenen Perspektive, ohne meine OO Gedankenmuster zu portieren, genau das ist, was ich versuche zu tun. Ich hoffe, diesen Prozess zu starten, indem ich Beispiele von OO- und Scheme-Lösungen für dasselbe Problem sehe, besonders wenn sie sehr unterschiedlich aussehen. – SuperElectric

Antwort

11

Ich bezweifle, CLOS würde als eine Krücke für alte Gewohnheiten dienen, fand ich es ziemlich anders als der OO-Stil in C++/Java/Python, und sehr interessant. Ich verstehe nicht alle Details, aber ich würde Peter Seibels Practical Common Lisp empfehlen. Wenn Sie On Lisp ohne viel Mühe lesen, sollten Sie in the chapters introducing CLOS in PCL tauchen können. Außerdem würde ich seine Google Tech Talk empfehlen, die Java und Common Lisp vergleicht.

Hier noch ein paar Empfehlungen dies eine vollwertige Antwort zu geben:

mit der Einführung Zustand und Veränderlichkeit

Der klassische Text Structure and Interpretation of Computer Programs deckt schon einige Beispiele in Kapitel 3 von Aufbau modularer Systeme mit Verschlüssen (und befasst sich mit Fragen). Kapitel 2 enthält einige generische und daten-/typspezifische Programme, die hilfreich sein können, um das CLOS-Lernen zu motivieren. Dieses Buch braucht wirklich keine Einführung, es ist eine gewaltige Arbeit und ich lese es seit dem Frühling nur langsam. Sehr empfehlenswert, wenn Sie sich für Scheme interessieren.

Während SICP ein großes Buch, es ist nicht ohne Mängel: Ein wirklich interessanter Blick auf diese ist der Aufsatz "The Structure and Interpretation of the Computer Science Curriculum", die auf einige Kritik an SICP erarbeitet und wird von den Autoren von geschrieben How to Design Programs (Ich habe HTDP nicht gelesen, aber ich habe gehört, dass es sehr gut ist). Während dieser Aufsatz Sie nicht spezifisch beibringen wird, was Sie suchen - das Vergleichen der Funktions- und OO-Programmierung - ist es wirklich wirklich interessant. Ihr Erstsemesterkurs beginnt mit einem ersten Semester Einführung in funktionale Programmierung mit Scheme (ich denke, PLT/Racket) und ist gefolgt von einem Semester der OO-Programmierung mit C++ oder Java ... zumindest ist das der Kurs, den sie in dem Aufsatz beschreiben.

Diese Folien von Peter Norvig adressieren einige der Design-Muster gemeinsam in der OO-Programmierung und zeigen, warum sie funktionale Sprachen wie Scheme und Lisp fehlen oder unnötig in dynamischen,: http://norvig.com/design-patterns/

ich vorsichtig das Buch empfehlen von die gleichen Autoren wie die Little Schemer Bücher: Ein wenig Java, ein paar Muster. Ich kann nicht mit Sicherheit sagen, ob dies ein wirklich gutes Buch ist oder nicht, es war unglaublich seltsam und es gibt einige wirklich schlechte Satzentscheidungen (Kursiv, Serifen, variable Breite, Hochschrift gehört nicht in einen Text zur Programmierung) , aber es könnte interessant sein, einen Blick darauf zu werfen. Sie können es wahrscheinlich sowieso billig finden. Nehmen Sie diese Empfehlung nicht ernst. Ich denke, es wäre besser, sich an die Scheme-Texte zu halten.

p.s. Ich muss einem Kommentar widersprechen, der besagt, dass die funktionale Programmierung bei der OO-Programmierung nicht so kompliziert ist, ich denke, das ist eine grobe Fehlstellung. Funktionale Programmierung in ihrer ganzen Breite ist wirklich verblüffend. Wenn man über Map/Filter/Reduce und First-Class-Funktionen hinausgeht und sich andere Dinge im Funktionsbereich wie Faul Evaluation, Vermeidung von Nebenwirkungen und Mutationen sowie die starken, statisch getippten Sprachen ansieht, wird es ziemlich interessant, und ist sicherlich genauso kompliziert wie traditionelle OO Programmierung. Ich habe gerade erst an der Oberfläche gekratzt, aber eine Menge neuer Ideen entdeckt. Programmierung ist ein kompliziertes Geschäft, ob OO oder funktional.

2

Wenn Sie mit Schema beginnen, sehen Sie sich How to Design Programs. In diesem Buch wird der schematisierte Ansatz zur Problemlösung vorgestellt. Ich glaube nicht, dass es ein Buch gibt, das OO und funktionale Lösungen mit den gleichen Programmierproblemen vergleicht. Aber es gibt eine nice presentation, die zeigt, wie dynamische Sprachen wie Scheme einfache Lösungen für Probleme bieten können, die komplexe Entwurfsmuster in statisch typisierten OOP-Sprachen erfordern.

3

Ein Anfänger-Ressource, die sehr hilfreich ist und sehr auf den gelegentlichen Leser ausgerichtet ist, ist "The Adventures of a Pythonista in Schemeland". Es ist (offensichtlich) aus der Sicht eines Python-Programmierers geschrieben, der erste Schritte mit Scheme unternimmt. Eine besonders schöne Sache ist, dass es einen Überblick über die aktuellen Implementierungen und Kompatibilitätsprobleme zwischen den einzelnen Implementierungen des Schemas gibt, was leider einige Kopfschmerzen bereiten kann, wenn man gerade erst anfängt.

Hinsichtlich Systeme einzuwenden, diese twodocuments (von here verbunden ist) gibt schöne Beispiele von sehr einfachen Spielzeug-Implementierungen mit Verschlüssen, die ich bei der Erfassung ihre Verwendung im Verständnis Zustand hilfreich.

+0

Der Pythonista-Link ist sehr cool, danke! – SuperElectric