Working through SICP in Jupyter Notebooks
I’m reading Structure and Interpretation of Computer Programs and want to write Racket in VSCode in Jupyter notebooks in a dialect of Scheme closest to the book. This requires this declaration at the top of each Racket file:
#lang r5rs
HOWEVER, Jupyter doesn’t like this …
The Jupyter kernel for Racket doesn't directly support changing the language with #lang
declarations in individual cells. Claude to the rescue, though … eventually … what a pain to finally get to this!
- We need to find our where
iracket
is installed.
❯ find ~/.local -name iracket.rkt
/home/captivus/.local/share/racket/8.2/pkgs/iracket/iracket.rkt
- Now, we edit this file (
home/captivus/.local/share/racket/8.2/pkgs/iracket/iracket.rkt
) as follows:
#lang racket/base
;; ============================================================
;; Enabling R5RS mode for compatibility with SICP code
(require racket/sandbox)
(define orig-current-namespace (current-namespace))
(define r5rs-namespace (make-base-namespace))
(parameterize ([current-namespace r5rs-namespace])
(namespace-require 'r5rs))
(define (switch-to-r5rs)
(current-namespace r5rs-namespace))
(define (switch-to-orig)
(current-namespace orig-current-namespace))
(switch-to-r5rs)
;; The rest of the original iracket.rkt content should follow here ...
;; ============================================================
- Now, restart your VSCode and create a Jupyter notebook as previously described in your TIL article … and you’re up!