2010-08-30 25 views
30

Je travaille par SICP. Actuellement, dans le premier chapitre, j'ai de la difficulté à obtenir Racket pour me permettre de redéfinir les "primitives". Par exemple, j'étais sous l'impression que je devrais être en mesure de faire arbitrairement (define + 5) et ce serait bien, ou redéfinir la procédure sqrt. Au lieu de cela, je reçois ceci:Dr Racket problèmes avec SICP

define-values: cannot change constant variable: + 

J'ai la langue actuellement mis à r5rs, que j'avais l'impression prendrait soin des problèmes de compatibilité avec SICP.

+0

Ce (définir + 5) fonctionne réellement sur ma machine (Ubuntu 12.04) avec DrRacket 5.1.3 maintenant. Ont-ils changé le défaut? – dividebyzero

Répondre

35

Même si possible, de telles redéfinitions ne sont pas quelque chose que vous devriez faire sans vraiment comprendre comment le système va réagir à cela. Par exemple, si vous redéfinissez +, tout autre code va-t-il casser? La réponse à cela dans le cas de Racket est "non" - mais c'est parce que vous n'avez pas vraiment besoin de redéfinir +: à la place, vous définissez un nouveau+, que seul votre code peut utiliser. En ce qui concerne le choix de la langue - Rackets Le mode R5RS est très strict, et ce n'est pas quelque chose que vous voudriez généralement utiliser. Pour un beaucoup environnement SICP-friendly, voir SICP Support page de Neil Van Dyke qui vous fournira un langage spécialement conçu pour le livre. (IIRC, il a même le langage graphique que les livres montre au large.)

+0

En fait, j'ai fini par installer le package de Neil Van Dyke, afin que je puisse prendre en charge le langage image et les flux. Au début, j'étais juste irrité que je ne pouvais pas travailler à travers certains des exemples dans le livre. Merci! –

11

Dans le panneau de langue, vous devez désactiver "interdire la redéfinition des liaisons initiales". Cela résout le problème.

19

j'ai rencontré des problèmes en essayant de travailler à travers l'exemple RSA ici (partie de la substance SICP):
http://mitpress.mit.edu/sicp/psets/ps3/readme.html

Pour obtenir ce Je devais faire ce travail:

1) Exécuter à travers le téléchargement initial en ajoutant ceci au-dessus d'un fichier vide:

#lang planet neil/sicp

puis frapper « Exécuter »

2) Profitez de très facile à utiliser DrRacket convivial, le téléchargement automatique et installer le module PlaNet Neil en allant prendre un café ;-)

3) Et puis une fois qu'il est installé, à proximité DrRacket. 4) Rouvrez et choisissez SICP PLaneT 1.15 dans la liste Choisir une langue.
(Je ne pouvais pas obtenir l'ajout de la déclaration en haut pour travailler pour moi en dehors de faire cela pour effectuer le téléchargement initial.)

Bonne chance!

+1

Bonjour, dans mon bureau, le site http: // http: //planet.racket-lang.org est bloqué, donc je ne peux pas télécharger le module de support SICP via DrRacket. Est-il possible de télécharger directement les fichiers, puis installer manuellement les fichiers sur DrRacket? Merci. – weima

+0

hi @weima. avez-vous déjà une réponse à cette question? –