Zbliżanie się do SICP w Clojure zamiast Scheme

11

Jestem studentem trzeciego roku studiów licencjackich w programie inżynierii oprogramowania i wpadłem na pomysł, aby przeczytać SICP doradcy, aby uzyskać głębsze i bardziej fundamentalne zrozumienie zasad stojących za całym tym oprogramowaniem, które tworzymy.

Zasugerował, aby nie uczyć się Schematu do ukończenia książki (ponieważ nie jest to tak powszechne jak współczesne dialekty Lisp), ale zamiast tego wykonać ćwiczenia w Clojure.

To już jest trudna książka, jeśli spróbuję wykonać ćwiczenia z książki w bardziej nowoczesnym Clojure, jak by to działało? Na przykład nie mogę znaleźć żadnych prawdziwych rozwiązań, składnia, której uczą w Schemacie, jest inna itp.

ironiczność
źródło

Odpowiedzi:

14

W pierwszym roku studiów na pierwszym kursie programowania korzystałem z SICP (czyli w 1988 r.). Miałem jednak podobny problem jak ty: dla mojego własnego komputera (właściwie Commodore Amiga) nie było w tym czasie żadnej implementacji Schematu, tylko inny dialekt Lisp (nie pamiętam jego nazwy).

Biorąc jednak pod uwagę elastyczność Lisp, bardzo łatwo było „emulować” składnię schematu, dodając brakujące makra lisp i funkcje w kilku skryptach. W rzeczywistości wystarczyło to do wdrożenia wszystkich ćwiczeń z rozdziału 1 do 3 wymaganych podczas kursu (zauważ, że SICP tak naprawdę nie wymaga pełnego stosu schematu, wystarczy mały podzbiór).

Skoro więc Clojure jest AFAIK nowoczesnym dialektem Lisp, myślę, że możesz po prostu zrobić coś podobnego, co daje ci całkowicie wolny wybór do pisania rzeczy w Scheme lub Clojure lub mieszance obu.

Oczywiście możliwe będzie również rozwiązanie ćwiczeń bezpośrednio w Clojure, oba języki są bardzo podobne. Co ważniejsze, w SICP nie chodzi o składnię języka programowania , chodzi o właściwe użycie abstrakcji w programowaniu (na przykład z funkcjami, danymi i obiektami). Więc nie myśl zbyt wiele o możliwych problemach ze składnią, nie są one w centrum tej książki i najprawdopodobniej mają niewielkie znaczenie.

Doktor Brown
źródło
6
Jedynym problemem, który przewiduję, jest brak clojure 1. TCO ( recurobsługuje tylko rekurencję ogona , a nie ogólne połączenia) i 2. których brak call-with-current-continuationjest potrzebny w rozdziale 4.
Daniel Gratzer
2
@ jozefg: Myślę, że jeśli OP przejdzie pomyślnie przez rozdziały 1-3, najprawdopodobniej nie będzie narzekał na różnice składniowe między Clojure a Scheme ;-)
Doc Brown,
@DocBrown rozważyć zmienił ing wyjaśnień o rozdziałach 1-3 w komentarzu powyżej w odpowiedzi (i ewentualnie wyjaśnianiu problemów z rozdziału 4, jeśli zgadzasz się z komentarz omawiając te )
gnat
@gnat: komentarz jest z pewnością poprawny, ale IMHO trochę podstępny. Ważną częścią mojej odpowiedzi jest ostatni akapit.
Doc Brown
0

Znalazłem twoje pytanie zaraz po znalezieniu tej strony, która wygląda na to, że jest na twojej drodze (chociaż możesz ją znaleźć lub alternatywę w kolejnych miesiącach): SICP w Clojure

Paul Bissex
źródło