Д-р Ракетки Проблемы с SiCP
Вопрос
Я работаю через SICP. В настоящее время в первой главе у меня проблемы с получением ракетки, чтобы позволить мне переопределить «примитивы». Например, я находился под впечатлением, что я должен быть в состоянии произвольно сделать (define + 5)
и это было бы хорошо или переопределить sqrt
процедура. Вместо этого я получаю это:
define-values: cannot change constant variable: +
У меня есть язык, который в настоящее время устанавливается на R5RS, которое я находился под впечатлением, позаботится о проблемах совместимости с SICP.
Решение
Даже если возможно, такие переопределения не то, что вы должны делать, не понимая, как система реагирует на это. Например, если вы переопределите +
, Будет ли какой-либо другой код кода? Ответ на то, что в случае ракетки - «нет» - но это потому, что вы на самом деле не добираетесь до переопределения +
: вместо этого вы определяете новый +
, Какой только ваш код может использовать.
Что касается языкового выбора - ракетки R5RS Mode - очень строгий, и это не то, что вы обычно хотите использовать. Для много Больше сийп-дружественных окружающей среды, увидеть Нил Ван Дайке Страница поддержки SICP Что предоставит вам язык, специально сделанный для книги. (IIRC, у него даже есть графический язык, который показывает книги.)
Другие советы
Я столкнулся с проблемами, пытающимися работать через пример RSA здесь (часть вещей SICP):
http://mitpress.mit.edu/sicp/psets/ps3/ruadme.html.
Чтобы получить эту работу, я должен был сделать это:
1) Запустите через начальную загрузку, добавив это в верхнюю часть пустого файла:
#lang planet neil/sicp
а затем ударить "бегать"
2) Наслаждайтесь очень удобной для пользователя DRRARCET, автоматически загрузки и установите модуль Planet Neil, собираясь схватить кофе ;-)
3) А затем после установки нажмите Drracket.
4) Вновь открывайте и выберите SiCP Planet 1.15 из выбора языкового списка.
(Я не мог добавить объявление в верхней части, чтобы работать для меня, чтобы выполнить это, чтобы выполнить начальную загрузку.)
Удачи!
На языковой панели вам необходимо отключить «запретить переопределение исходных привязки». Это исправляет проблему.