2010-08-30 14 views
30

Estoy trabajando a través de SICP. Actualmente, en el primer capítulo, tengo problemas para conseguir que Racket me permita redefinir "primitivos". Por ejemplo, tenía la impresión de que podía hacer arbitrariamente (define + 5) y que estaría bien, o redefinir el procedimiento sqrt. En su lugar, me sale esto:Problemas de Dr Racket con SICP

define-values: cannot change constant variable: + 

tengo el idioma configurado para R5RS, que estaba bajo la impresión se haría cargo de los problemas de compatibilidad con SICP.

+0

Esto (define + 5) realmente funciona en mi máquina (Ubuntu 12.04) con DrRacket 5.1.3 ahora. ¿Cambiaron el valor predeterminado? – dividebyzero

Respuesta

35

Incluso si es posible, tales redefiniciones no son algo que deba hacer sin entender realmente cómo reaccionará el sistema ante esto. Por ejemplo, si redefine +, ¿se romperá cualquier otro código? La respuesta a eso en el caso de Racket es "no", pero esto se debe a que realmente no puede redefinir +: en su lugar, define nuevo+, que solo su código puede usar.

En cuanto a la elección de idioma: el modo Racket R5RS es muy estricto, y no es algo que normalmente desee utilizar. Para un mucho más ambiente amigable para SICP, vea el SICP Support page de Neil Van Dyke que le proporcionará un lenguaje específicamente creado para el libro. (IIRC, que incluso tiene el lenguaje gráfico que los libros muestra apagado.)

+0

De hecho, terminé adelante e instalando el paquete de Neil Van Dyke, para que pudiera tener soporte para el lenguaje de imágenes y para las transmisiones. Inicialmente, estaba irritado porque no podía trabajar con algunos de los ejemplos del libro. ¡Gracias! –

11

En el panel de idiomas, debe desactivar "no permitir la redefinición de los enlaces iniciales". Esto soluciona el problema.

19

me encontré con problemas al tratar de trabajar a través del ejemplo RSA aquí (parte de la materia SICP):
http://mitpress.mit.edu/sicp/psets/ps3/readme.html

Para obtener esta de trabajo que tenía que hacer esto:

1) Ejecutar a través de la descarga inicial añadiendo esto a la parte superior de un archivo en blanco:

#lang planet neil/sicp

y luego pulsar "Ejecutar"

2) disfrutan de muy fácil de usar DrRacket descarga, automática e instalar el módulo planeta Neil por ir a tomar un café ;-)

3) Y a continuación, una vez instalado, cerca DrRacket.

4) Vuelva a abrir y seleccione SICP PLaneT 1.15 en la lista Elija un idioma.
(No pude obtener la adición de la declaración en la parte superior para que trabaje para mí aparte de hacer eso para realizar la descarga inicial.)

¡Buena suerte!

+1

Hola, en mi oficina, el sitio http: // http: //planet.racket-lang.org está bloqueado, así que no puedo descargar el módulo de soporte de SICP a través de DrRacket. ¿Hay alguna manera de descargar directamente los archivos y luego instalar manualmente los archivos en DrRacket? Gracias. – weima

+0

hi @weima. ¿Ya tienes una respuesta a esta pregunta? –