Even if possible, such redefinitions are not something that you should do without really understanding how the system will react to this. For example, if you redefine +
, will any other code break? The answer to that in Racket’s case is “no” — but this is because you don’t really get to redefine +
: instead, you define a new +
, which only your code can use.
As for the language choice — Rackets R5RS mode is a very strict one, and it’s not something that you’d usually want to use. For a much more SICP-friendly environment, see Neil Van Dyke’s SICP Support page which will provide you with a language specifically made for the book. (IIRC, it even has the graphical language that the books shows off.)