problemi Dr racchetta con SICP
Domanda
Sto lavorando attraverso SICP. Attualmente, nel primo capitolo, sto avendo problemi a far Racket per farmi ridefinire "primitivi". Per esempio, ho avuto l'impressione che dovrei essere in grado di fare in modo arbitrario (define + 5)
e che sarebbe bene, o ridefinire la procedura sqrt
. Invece, ottengo questo:
define-values: cannot change constant variable: +
Ho la lingua attualmente impostata R5RS, che ho avuto l'impressione si sarebbe preso cura dei problemi di compatibilità con SICP.
Soluzione
Anche se possibile, tali ridefinizioni non sono qualcosa che si dovrebbe fare senza realmente capire come il sistema reagirà a questo. Ad esempio, se si ridefinisce +
, volontà qualsiasi altra pausa codice? La risposta a questa nel caso di Racket è "no" - ma questo è perché non si è davvero ottenere per ridefinire +
: invece, si definisce una nuovo +
, che solo il codice può utilizzare <. / p>
Per quanto riguarda la scelta della lingua - modalità Racchette R5RS è molto severo, e non è qualcosa che ti sentiresti di solito desidera utilizzare. Per la pagina di un molto di più SICP-friendly ambiente, vedere Neil Van Dyke SICP Support , che vi fornirà un linguaggio specificamente realizzati per il libro. (IIRC, ha anche il linguaggio grafico che i libri spettacoli off.)
Altri suggerimenti
Mi sono imbattuto in problemi cercando di lavoro attraverso l'esempio RSA qui (parte della roba SICP):
http://mitpress.mit.edu/sicp/psets/ps3/readme.html
Per ottenere questo lavoro ho dovuto fare questo:
1) Esegui attraverso il download iniziale aggiungendo questo alla parte superiore di un file vuoto:
#lang planet neil/sicp
e premendo su "Esegui"
2) Godetevi molto facile di DrRacket amichevole, il download automatico e installare il modulo pianeta Neil andando a prendere un caffè; -)
3) E poi una volta che è installato, vicino DrRacket.
4) Riaprire, e scegliere SICP pianeta 1,15 dall'elenco Scegli una lingua.
(Non ho potuto ottenere l'aggiunta della dichiarazione in alto per lavoro per me oltre a fare quello per eseguire il download iniziale.)
In bocca al lupo!
Nel pannello di lingua, è necessario disabilitare "ridefinizione Disallow di attacchi iniziali." Questo risolve il problema.