Проблемы доктора Ракета с SICP - PullRequest
30 голосов
/ 30 августа 2010

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

define-values: cannot change constant variable: +

У меня сейчас установлен язык R5RS, и у меня сложилось впечатление, что я позабочусь о проблемах совместимости с SICP.

Ответы [ 3 ]

35 голосов
/ 30 августа 2010

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

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

20 голосов
/ 18 мая 2011

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

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

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

#lang planet neil/sicp

, а затем нажмите «Run»

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

3) А затем, после его установки, закройте DrRacket.

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

Удачи!

11 голосов
/ 30 августа 2010

На языковой панели необходимо отключить «запретить переопределение начальных привязок». Это решает проблему.

...