Подтвердить что ты не робот

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

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

define-values: cannot change constant variable: +

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Чтобы получить эту работу, я должен был сделать это:

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

#lang planet neil/sicp

а затем нажмите "Запустить"

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

3) И затем, как только он будет установлен, закройте DrRacket.

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

Удачи!

Ответ 3

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