Annäherung an SICP in Clojure anstelle von Scheme

11

Ich bin ein Bachelor-Student im dritten Jahr in einem Software-Engineering-Programm und habe einem Berater die Idee nahegelegt, SICP zu lesen, um ein tieferes und grundlegenderes Verständnis der Prinzipien hinter all dieser Software zu erlangen, die wir entwickeln.

Er schlug vor, das Schema nicht zu lernen, um das Buch zu vervollständigen (weil es nicht so häufig ist wie moderne Dialekte von Lisp), sondern stattdessen die Übungen in Clojure zu machen.

Es ist ein bereits schwieriges Buch, wenn ich die Übungen des Buches in der moderneren Clojure versuche, wie würde das funktionieren? Zum Beispiel kann ich keine wirklichen Lösungen finden, die Syntax, die sie für Scheme lehren, ist unterschiedlich usw.

ironische Diktion
quelle

Antworten:

14

In meinem ersten Jahr an der Universität war der erste Programmierkurs, den ich belegte, die Verwendung von SICP (das war 1988). Ich hatte jedoch ein ähnliches Problem wie Sie: Für meinen eigenen Computer (eigentlich einen Commodore Amiga) war zu diesem Zeitpunkt keine Schema-Implementierung verfügbar, nur ein anderer Lisp-Dialekt (ich erinnere mich nicht an seinen Namen).

Angesichts der Flexibilität von Lisp war es jedoch ziemlich einfach, die Schemasyntax zu "emulieren", indem nur die fehlenden Lisp-Makros und -Funktionen in einigen Skripten hinzugefügt wurden. Dies war tatsächlich genug, um alle während des Kurses erforderlichen Übungen aus Kapitel 1 bis 3 durchzuführen (beachten Sie, dass für SICP nicht der vollständige Schemastapel erforderlich ist, sondern nur eine kleine Teilmenge erforderlich ist).

Da Clojure AFAIK ist, ein moderner Lisp-Dialekt, könnten Sie wahrscheinlich etwas Ähnliches tun, wodurch Sie die freie Wahl haben, Dinge entweder in Schema oder Clojure oder in einer Mischung aus beiden zu schreiben.

Natürlich ist es auch möglich, die Übungen direkt in Clojure zu lösen, beide Sprachen sind sehr ähnlich. Noch wichtiger ist, dass es bei SICP nicht um die Programmiersprachen-Syntax geht , sondern um die richtige Verwendung von Abstraktionen bei der Programmierung (z. B. mit Funktionen, Daten und Objekten). Denken Sie also nicht zu viel über mögliche Syntaxprobleme nach, diese stehen nicht im Mittelpunkt dieses Buches und sind höchstwahrscheinlich von geringer Bedeutung.

Doc Brown
quelle
6
Das einzige Problem , ich sehe ist , dass clojure fehlt 1. TCO ( recurnur Griffe Schwanz Rekursion , nicht allgemeine Anrufe) und 2. das Fehlen von call-with-current-continuationdenen für Kapitel benötigt wird 4.
Daniel Gratzer
2
@jozefg: Ich denke, wenn der OP sich erfolgreich durch die Kapitel 1-3 schafft, wird er höchstwahrscheinlich an dem Punkt sein, an dem er sich nicht mehr über die syntaktischen Unterschiede zwischen Clojure und Scheme beschweren wird ;-)
Doc Brown
@ DocBrown erwägen , die Klarstellung zu den Kapiteln 1-3 in Ihrem Kommentar oben in der Antwort zu bearbeiten (und möglicherweise die Probleme mit Kapitel 4 zu erklären, wenn Sie mit dem Kommentar einverstanden sind, der diese diskutiert )
Mücke
@gnat: Der Kommentar ist sicherlich richtig, aber meiner Meinung nach ein bisschen nitty. Der wichtige Teil meiner Antwort ist der letzte Absatz.
Doc Brown
0

Ich habe Ihre Frage gefunden, kurz nachdem ich diese Seite gefunden habe, die so aussieht, als ob sie genau in Ihrer Gasse liegt (obwohl Sie sie in den vergangenen Monaten möglicherweise gefunden haben oder eine Alternative): SICP in Clojure

Paul Bissex
quelle