Проблемы Dr Racket с SICP

Я работаю через SICP. В настоящее время в первой главе у меня возникают проблемы с тем, чтобы Racket позволил мне переопределить «примитивы». Например, у меня сложилось впечатление, что я могу произвольно выполнить (define + 5), и это было бы нормально, или переопределить процедуру sqrt. Вместо этого я получаю это:

define-values: cannot change constant variable: +

В настоящее время у меня установлен язык R5RS, который, как я полагал, позаботится о проблемах совместимости с SICP.


person hraesvelgr    schedule 30.08.2010    source источник
comment
Это (define + 5) на самом деле работает на моей машине (Ubuntu 12.04) с DrRacket 5.1.3. Они изменили значение по умолчанию?   -  person dividebyzero    schedule 10.06.2012


Ответы (3)


Даже если это возможно, такие переопределения не следует делать, не понимая толком, как на это отреагирует система. Например, если вы переопределите +, не сломается ли какой-либо другой код? Ответ на этот вопрос в случае с Racket — «нет», но это потому, что вы на самом деле не можете переопределить +: вместо этого вы определяете новый +, который может использовать только ваш код.

Что касается выбора языка - режим Rackets R5RS очень строгий, и вы обычно не хотите его использовать. Чтобы узнать о намного более удобной для SICP среде, посетите страницу поддержки SICP, который предоставит вам язык, специально созданный для этой книги. (IIRC, у него даже есть графический язык, который демонстрируют книги.)

person Eli Barzilay    schedule 30.08.2010
comment
На самом деле я пошел дальше и установил пакет Нила Ван Дайка, чтобы иметь поддержку языка изображений и потоков. Сначала меня просто раздражало, что я не могу разобраться с некоторыми примерами в книге. Спасибо! - person hraesvelgr; 31.08.2010

Я столкнулся с проблемами при работе с примером RSA здесь (часть материала SICP):
http://mitpress.mit.edu/sicp/psets/ps3/readme.html

Чтобы заставить это работать, мне пришлось сделать это:

1) Запустите первоначальную загрузку, добавив это в начало пустого файла:

#lang planet neil/sicp

а затем нажмите «Выполнить»

2) Наслаждайтесь очень удобной автоматической загрузкой и установкой модуля PLaneT Neil от DrRacket, выпив чашечку кофе ;-)

3) После установки закройте DrRacket.

4) Снова откройте и выберите SICP PLaneT 1.15 из списка «Выберите язык».
(Я не смог заставить добавление объявления вверху работать на меня, кроме как сделать это для выполнения начальной загрузки.)

Удачи!

person jpswain    schedule 18.05.2011
comment
Привет, в моем офисе сайт http://http://planet.racket-lang.org заблокирован, поэтому я не могу загрузить модуль поддержки SICP через DrRacket. Есть ли способ напрямую загрузить файлы, а затем вручную установить файлы в DrRacket? Спасибо. - person weima; 09.07.2012

В языковой панели нужно отключить "запретить переопределение начальных привязок". Это устраняет проблему.

person hraesvelgr    schedule 30.08.2010