2008-10-27 5 views
32

Я поймал ошибку, чтобы узнать функциональное программирование на самом деле. Так что мой следующий проект самообучения должен работать через Structure and Interpretation of Computer Programs. К сожалению, я никогда не узнал Lisp, так как я не был главным специалистом в колледже.Какой язык вы бы использовали для самостоятельного изучения SICP?

В то время как SICP не подчеркивает инструменты программирования, выполнение упражнений влечет за собой выбор языка Lisp-like. Похоже, некоторая реализация Scheme будет дорогой наименьшего сопротивления . С другой стороны, я слышу о других, которые использовали Common Lisp и Clojure. Мне кажется, что Common Lisp или Clojure будут более вероятными для использования в производственном коде, и поэтому немного лучше для моего резюме. Кстати, я полностью догадываюсь, что изучение языка стоит само по себе, но изучение языка, которое помогает моему резюме, по-прежнему является преимуществом. Я - капиталист и академик о моем обучении.

Если вам нужно было самостоятельно изучить SICP, какой язык вы бы выбрали и почему? В идеале я хотел бы использовать язык, который может работать на JVM. Я могу работать с языком, где REPL работает с bash и emacs.

ДОПОЛНИТЕЛЬНО: кто-нибудь из вас пробовал читать SICP без использования Схемы? Если да, то каков был ваш опыт?

ответ

40

Использовать схему. Это один из самых простых и простых языков в существовании, и вы потратите очень мало времени, чтобы усвоить его, чтобы понять SICP. Как только вы поймете SICP, вы увидите, как эти понятия применяются на любом языке.

3

Код в книге представляет собой схему, поэтому вам все равно придется ее прочитать - вы можете написать ее. Тебе может понравиться!

22

Использование DrScheme. Как говорили другие, Scheme - простой язык, а DrScheme - отличная среда для использования, в которой есть много поддержки и документальной документации.

+0

Скачан вчера, а его пользовательский интерфейс выглядит очень простым в использовании. – Alan 2008-10-27 22:23:48

+4

Алан, не забудьте использовать поддержку SICP, доступную от PLaneT (пользовательские библиотеки для PLT Scheme/DrScheme). http://planet.plt-scheme.org/package-source/neil/sicp.plt/1/13/planet-docs/sicp/index.html – soegaard 2009-06-13 10:52:52

+3

DrScheme теперь известен как DrRacket http: // ru. wikipedia.org/wiki/DrRacket – 2010-11-12 05:19:16

2

Я поймал ошибку, чтобы узнать функциональное программирование на самом деле.

Из того, что я слышал, SICP о гораздо больше, чем просто функциональное программирование.

0

но изучение языка, который помогает моему резюме, по-прежнему является преимуществом.

Вы должны попробовать использовать VB6 или COBOL, то, как есть много биллинговой работы там для нее.

+0

Да, программисты COBOL по-прежнему понадобятся, но ... это вопрос о функциональном программировании, а не о COBOL. – Alan 2008-10-27 04:50:26

+1

@Alan: Я предполагаю, что этот ответ имел в виду как сарказм :) – Ovid 2008-10-27 12:11:21

2

Оговорка: Я не читал всю книгу

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

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

+1

IIRC, продолжения на самом деле не делают заметного появления в книге. – 2008-10-28 03:07:51

1

Я слышал о других, которые использовали Common Lisp и Clojure.

Вы должны использовать любой язык, наиболее мотивирующий вас, но 99% людей, работающих через SICP, будут использовать Схему.

2

Я Lua, когда я взглянул на SICP

работает довольно хорошо

+0

Я тоже пытаюсь это сделать. Я знаю, что Lua не хватает полного продолжения и макроса. Являются ли эти недостающие части критическими для SICP (особенно для последних нескольких глав)? Или есть какая-то другая недостающая часть, о которой я не знал? – Middleware 2012-12-11 14:36:47

+0

нет, не очень. Некоторые вещи вам нужно подойти немного по-другому, потому что синтаксис отличается, но решения часто выглядят очень похожими. – 2012-12-11 19:14:35

3

Чтобы получить реальную выгоду из книги, которую вы должны будете использовать схему. Какая реализация схемы зависит от текущей среды:

Окна - Dr Scheme (PLT Scheme) - http://download.plt-scheme.org/ Linux - Если это удаленный аккаунт - вы можете рассмотреть MZScheme (PLTScheme) (http://download.plt-scheme.org/) в противном случае вы будете хотеть используйте Dr Scheme, если это локальный экземпляр Linux.

3

Я думаю, что Clojure подходит к тому, что вы хотите сделать просто отлично. Он гораздо более функциональный, чем схема, потому что структуры данных неизменяемы, и это может быть очень полезно, поскольку оно работает на JVM. Но имейте в виду, что в конечном итоге вы все равно научитесь Scheme, чтобы понять код в книге.

4

Я согласен, что вы должны просто использовать Схему. Однако, если у вас действительно есть зуд, чтобы использовать Common Lisp или Clojure, я бы выбрал последнее. Схемы и Clojure являются Lisp-1, поэтому код в книге будет более конгруэнтным между этими двумя (за исключением хвостовых вызовов, но если вы поймете, как компенсировать это будет хорошо). Common Lisp является Lisp-2 и, вероятно, будет скрывать красоту того, что SICP пытается научить вас.

2

Используйте что-нибудь, кроме схемы.

При использовании чего-то еще, а затем схемы, вам будет предложено больше подумать и избежать соблазна просто повторить примеры. Это хорошо.

Конечно, он должен быть достаточно подобным, в смысле lisp-1, поэтому clojure и arc хороши.

8

Не прямой ответ, но я ожидаю, что эта информация будет полезна для всех, кто работает через SICP. Обязательно посмотрите на видео здесь:

http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

Есть 20 эпизодов в час каждый. Они были представлены Абельсоном и Суссманом в 1986 году для сотрудников Hewlett Packard. Я положил их на свой iPod и наблюдал за ними во время поездок на работу. Захватывающий.

Кроме того, полный текст книги доступен в Интернете по адресу http://mitpress.mit.edu/sicp/

4

Как кто-то, кто нанимает людей, я вам скажу, что наличие схемы на резюме хорошая вещь. Наличие схемы, SML, Ocaml или Haskell в вашем резюме предполагает, что вы очень хорошо округленный программист и довольно мыслитель.

Это, если вы пытаетесь использовать функциональное программирование, почему бы не Haskell вместо этого? Схема - многопарадигма, она может быть OO, Funcitonal, Streams или что-либо еще под солнцем. Это делает его удивительным, чтобы попробовать новые стили программирования и парадигмы, но если ваша цель строго функциональна, это может быть проблемой. (В итоге вы напишете не функциональный код и не осознаете его.)

1

Я работал через (большинство) из них в начале этого года и использовал Common Lisp просто потому, что у меня не было доступной схемы (не спрашивайте).

Как уже отмечалось, Scheme является языком Lisp-1, тогда как Common Lisp является Lisp-2. Есть достаточно различий между языками, чтобы иметь в виду, что вы внимательно относитесь к переводу кода в книге, поэтому он заставлял меня действительно захватывать материал.

2

Я использовал схему для самостоятельного изучения. Лучший способ учиться у SICP - сделать все упражнения чрезмерно.

Я использовал Gnu guile для схемы.

0

Я думаю, что схема будет естественным выбором (так как он является «родным» языком SICP)

Однако, поскольку истинное значение SICP исходит из понятий, а не механик конкретного языка, я подумайте, что это будет ценное учебное упражнение, чтобы попробовать его на любом Lisp-подобном языке. Я лично пробовал некоторые упражнения в Clojure, и все они хорошо переводились.

Для заинтересованных лиц существует текущий проект по созданию Clojure translation of SICP.

1

В то время как вы могли бы использовать что-то другое, кроме Схемы, вы без лишних усилий добавили бы дополнительную работу и, возможно, отрезали себя от полного понимания того, о чем идет речь. SICP была вводной книгой программирования. Это шаг к более глубоким темам в информатике. Увязнуть в «переводе» с Схемы на CL или Clojure, вероятно, заслонят более тонкие точки. Это было бы позором, потому что SICP действительно является воротами для понимания того, что такое программирование.

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