What is the best Scheme implementation for working through SICP?
Solution 1
Use MIT Scheme.
It's recommended by the authors of SICP, and is used at MIT for the 6.001: Structure and Interpretation of Computer Programs course.
Solution 2
Use Racket (formerly PLT Scheme).
The DrRacket IDE is an excellent starting point for all things Scheme including SICP.
To look up keywords in the documentation, place the cursor on the keyword and press F1. In DrRacket you can now see the images directly in the REPL (the read-eval-print-loop).
SICP Support for DrRacket, by Neil van Dyke.
Update (2016): The new SICP package is at http://pkgs.racket-lang.org/#[sicp]
Download it with the Package Manager (in DrRacket) or use raco
.
Manual
Update2 (2016): Also if you want to try a new implementation of the SICP picture language, then download sicp-pict2.rkt.
Update3 (2020): The sicp-lang package includes an implementation of the sicp language and the sicp picture language.
Documentation: SICP Support for DrRacket
Source Code: sicp-lang on GitHub
Racket Package: sicp-lang package info
Note: The picture language has more features (such as colors and larger sizes) than the picture language described in the book. The source contains examples: https://github.com/sicp-lang/sicp/blob/master/sicp-pict/main.rkt
Solution 3
MIT/GNU Scheme, just make sure you load the SICP compatibility package (yes, they provide specific libraries to enhance guarantee the SICP exercises work).
Solution 4
This was suprisingly annoying to get done on macOS. Here's how it works as of today, assuming you have Homebrew. (Might want to run brew update
once in a while).
brew cask install racket
raco setup # might be optional
raco pkg install sicp
Now you can (require sicp)
or simply run
racket -l sicp --repl
Which you might want to abbreviate to scheme
. In bash that'd be
alias scheme='racket -l sicp --repl'
which you can add to your ~/.bashrc
Solution 5
I've just started do SICP this week.
Currently, MIT Scheme is broken in in Ubuntu Linux (9.04 "jaunty"). It might be working in the future.
DrScheme is working, and is working well. You can use soegard's package listed above or Neil Van Dyke's package, which is based on soegard's package and is available from http://www.neilvandyke.org/sicp-plt/. The nice thing about this package is that when installed, you can use Language|Choose Language.... menu item to select SICP.
Joel McCracken
Updated on February 13, 2020Comments
-
Joel McCracken over 4 years
I have been using PLT Scheme, but it has some issues. Does anyone know of a better implementation for working through SICP?
-
Jonathan Hartley about 13 yearsThe thing I didn't like about MIT Scheme was that I couldn't figure out how to simply execute a scheme script from the command-line and have its output displayed in my console - the same way I'd expect to run a Python or Ruby script. Was I being extremely dense? How is this achieved, without launching the big interactive Emacs-based environment and then having to quit it again every time?
-
soegaard about 12 yearsNote: Neil van Dyke has written a very nice SICP package for Racket. Use this instead of my old one.
-
tutysara almost 12 yearsthere is a pre built 64 bit version of mit-scheme here - [www-users.cselabs.umn.edu/classes/Fall-2010/csci1901/…
-
Bernard Notarianni over 11 yearsJust successfully compiled it on Ubuntu X64 using the source provided on GNU site.
-
FUD almost 11 yearshmm OP asked about PLT Scheme which became DrScheme and then DrRacket and finally Rocket lang now.
-
offby1 over 9 years@f4hy I suspect that a 32-bit version would work fine on x86_64
-
Display Name almost 8 yearsWarning: it's impossible to securely install the SICP support package. When you run that code (
#lang planet neil/sicp
), it tries to download stuff via plain http, so MitM attacks are possible. And when downloading code which will be executed on your machine, this is a big deal. The page isn't available through https, that's also means you can get anything at all instead of the content. I hope the author will fix it at some time. -
soegaard almost 8 yearsDon't worry. The SICP package has moved from PLaneT to pkgs.racket-lang.org.
-
Gringo Suave over 7 yearsTo exec from command line: stackoverflow.com/questions/24720112/…
-
Alex Gian over 5 yearsYou do not have to use Edwin to run MIT-Scheme. Edwin is just specified as an option on the command line script, which you can change. I run MIT-Scheme under Emacs(24), set up as the default scheme implementation, so that M-x 'run-scheme' instantly fires up the MIT environment that I want (mechanics/scmutils). It is surprisingly easy if you just think about it a bit. The Dr Racket interface with the '#lang sicp' option is very good too, we've come a long way from the bad old days... (All this on Ubuntu, 16.04 LTS)
-
Isaac Rabinovitch over 5 yearsDid you notice that I said that I don't want to re-learn EMACS? If you could point me at command line docs that I could use to integrate MIT Scheme with my favorite editor, that would be useful information.
-
Alex Gian over 5 yearsSorry, I have no docs to hand, but MIT-Scheme is not tied to any editor. If you cd to your mit-scheme installation directory (the one that has just a bin and a lib directory in it), the the following command should get you going: >>
bin/mit-scheme --library ./lib --heap 120000
<< . After that it's up to you to configure it with your "favourite editor". Or just use the command line as a repl and load whatever file you want from your ed. -
Isaac Rabinovitch over 5 yearsSo, instead of "You have to use edwin" I should have said "You have to use edwin unless you're willing to use a complicated, undocumented hack." Thanks for the correction.
-
Flux almost 5 years
-
soegaard over 4 yearsNote: The picture language has more features (such as colors and larger sizes) than the picture language described in the book. The source contains examples: github.com/sicp-lang/sicp/blob/master/sicp-pict/main.rkt
-
Ludovic Kuty almost 3 yearsWith CHICKEN Scheme 5.2.0, we use two SRFIs : 203 and 216.
chicken-install srfi-203
andchicken-install srfi-216
. -
Philipp Ludwig over 2 yearsDownvote, because DrRacket does not work at all. If you write
#lang sicp
as stated in the sicp plugin documentation, all you get isread-syntax:
#lang` not enabled`. -
soegaard over 2 years@PhilippLudwig you need to install the sicp package first. Choose the package manager in … one of the first menus of DrRacket.
-
Philipp Ludwig over 2 years@soegaard Of course I installed it according to the documentation; it still does not work.
-
soegaard over 2 years@PhilippLudwig which version of racket an is do you have? It’s supposed to work.
-
Philipp Ludwig over 2 years@soegaard Version 8.2.
-
soegaard over 2 years@PhilippLudwig I just tested on version 8.3.0.2 on macOS and that worked. StackOverflow is not the best medium for trouble shooting. Can I get you to submit an issue here instead? github.com/sicp-lang/sicp/issues
-
soegaard over 2 years@PhilippLudwig Ah! I figured out what's wrong. In the lower left corner of DrRacket, you will need to change the languge to "Determine language from source".
-
Philipp Ludwig over 2 years@soegaard I did that, it still does not work. I will just leave it at that, but thanks for your support.
-
soegaard over 2 years@PhilippLudwig Which error do you see? On Github you can send a screen shot.
-
Philipp Ludwig over 2 years@soegaard Okay, I figured it out. You have to type
#lang sicp
in the upper window, not at the prompt in the lower Window. I was not aware of that. -
SodaCris about 2 yearsinstallation commands:
raco pkg install sicp
, use in REPL:(require sicp)
, then enter(inc 1)
to test.