Наближається SICP в Clojure замість схеми


11

Я бакалавр третього курсу програми інженерії програмного забезпечення, і я висунув ідею прочитати SICP раднику, щоб отримати глибше і більш фундаментальне розуміння принципів, що стоять за всім цим програмним забезпеченням, яке ми розробляємо.

Він запропонував не вивчати схему для завершення книги (бо це не так часто, як сучасні діалекти Ліспа), а виконувати вправи в Clojure.

Це вже важка книга, якщо я спробую виконати вправи книги в більш сучасному Clojure, як би це працювало? Наприклад, я не можу знайти реальних рішень, синтаксис, який вони навчають для схеми, відрізняється тощо.

Відповіді:


14

На моєму першому курсі в університеті перший курс програмування, який я взяв, використовував SICP (це був 1988 рік). Однак у мене була подібна проблема, як у вас: для мого власного комп’ютера (насправді Commodore Amiga) у той час не було доступно впровадження схеми, лише інший діалект Ліспа (я не пам’ятаю його назви).

Однак, зважаючи на гнучкість Lisp, симулювати синтаксис схеми досить просто, додавши відсутні кілька макросів і функцій lisp у кількох сценаріях. Цього насправді було достатньо для виконання всіх вправ з розділу 1 до 3, необхідних під час курсу (зауважте, що SICP насправді не потребує повного стека схем, невеликий підмножина - все, що вам потрібно).

Отже, оскільки Clojure - це AFAIK - це сучасний діалект Lisp, я думаю, ви могли б зробити щось подібне, що дає вам повний вільний вибір для написання речей або в Scheme, або Clojure, або в суміш обох.

Звичайно, вирішити вправи безпосередньо в Clojure також буде можливо, обидві мови дуже схожі. Що важливіше, SICP - це не синтаксис мови програмування , а правильне використання абстракцій у програмуванні (наприклад, з функціями, даними та об'єктами). Тому не думайте надто багато можливих проблем із синтаксисом, вони не в центрі уваги цієї книги і, швидше за все, не викликають особливих проблем.


6
Єдине питання, яке я передбачаю, полягає у тому, що клоджуру не вистачає 1. ТСО ( recurлише обробка хвостової рекурсії , а не загальні дзвінки) та 2. відсутність call-with-current-continuationяких потрібна для глави 4.
Даніель Гратцер

2
@jozefg: Я думаю, що якщо ОП успішно пройде через глави 1-3, він, швидше за все, в той момент, коли він більше не поскаржиться на синтаксичні відмінності між Clojure та Scheme ;-)
Док Браун,

@DocBrown розглянути питання про редагування роз'яснень щодо розділів 1-3 у вашому коментарі вище у відповідь (і, можливо, пояснення питань у розділі 4, якщо ви згодні з коментарем, обговорюючи їх )
gnat

@gnat: коментар, безумовно, правильний, але ІМХО трішки пустотливий. Важлива частина моєї відповіді - останній абзац.
Doc Brown

0

Я знайшов ваше запитання відразу після того, як я знайшов цей сайт, схожий на те, що він знаходиться прямо на вашій алеї (хоча ви, можливо, знайшли його або альтернативу впродовж місяців, що пройшли): SICP у Clojure

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.