Подход к SICP в Clojure вместо схемы

11

Я учусь на третьем курсе бакалавриата по программе разработки программного обеспечения, и у меня возникла идея прочитать SICP советнику, чтобы получить более глубокое и фундаментальное понимание принципов, лежащих в основе всего этого программного обеспечения, которое мы разрабатываем.

Он предложил не изучать Схему, чтобы завершить книгу (потому что это не так часто встречается, как современные диалекты Лиспа), а вместо этого делать упражнения в Clojure.

Это уже сложная книга, если я попытаюсь выполнить упражнения книги в более современном Clojure, как это будет работать? Например, я не могу найти никаких реальных решений, синтаксис, который они преподают для Схемы, отличается и т. Д.

ironicaldiction
источник

Ответы:

14

В первый год обучения в университете первым курсом программирования я пользовался SICP (это был 1988 год). Однако у меня была похожая проблема, как у вас: для моего собственного компьютера (на самом деле Commodore Amiga) в то время не было никакой доступной реализации Scheme, только другой диалект Lisp (я не помню его названия).

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

Так как Clojure является AFAIK современным диалектом Лиспа, я думаю, вы могли бы просто сделать что-то подобное, что дает вам совершенно свободный выбор для написания вещей либо в Scheme, либо в Clojure, либо в смеси обоих.

Конечно, решение задач непосредственно в Clojure также будет возможно, оба языка очень похожи. Более важно то, что SICP - это не синтаксис языка программирования , а правильное использование абстракций в программировании (например, с функциями, данными и объектами). Так что не думайте слишком много о возможных проблемах с синтаксисом, они не находятся в центре внимания этой книги и, скорее всего, не имеют большого значения.

Док Браун
источник
6
Единственная проблема, которую я предвижу, заключается в том, что в clojure не хватает 1. TCO ( recurобрабатывается только хвостовая рекурсия , а не общие вызовы) и 2. отсутствие call-with-current-continuationкоторого необходимо для главы 4.
Даниэль Гратцер,
2
@jozefg: Я думаю, что если ОП успешно пройдет через главы 1-3, он, скорее всего, будет в той точке, где он больше не будет жаловаться на синтаксические различия между Clojure и Scheme ;-)
Док Браун
@DocBrown рассмотреть редактирование ИНГА разъяснений относительно глав 1-3 в вашем комментарии выше в ответ (и , возможно , объясняя проблемы с главой 4, если вы согласны с коментарием обсудить их )
комар
@gnat: комментарий, безусловно, правильный, но ИМХО немного мимолетный. Важной частью моего ответа является последний абзац.
Док Браун
0

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

Пол Биссекс
источник