JupyterでScheme処理系を動かしてSICPを勉強する

2016.04.05

はじめに

最近社内でSICPの勉強会を行っています。

SICPでは、教材としてLISP処理系の一つであるschemeを採用しており、勉強する時にはschemeを動かしながら例題の動作確認や課題を行っていきます。

Emacs + Gaucheを用いて学習を進めていくパターンが多い印象ですが、Emacsに慣れていない人にとっては、まずEmacsの操作を満足にできるようになるまでに高いハードルがあります。

今回は、Emacsの代わりにJupyterを用いてScheme処理系を動かし、その動作を確認する方法を紹介します。

Jupyterについて

Jupyterとは、簡単にいってしまうとブラウザ上で動作するREPL環境 + メモ帳です。

以下の画面のように、コードをその場で実行し、その結果をその場で見ることができます。
また、コードの他にmarkdown形式で文章を追加することもできるので、コードと一緒にメモを残しておき、後から内容を振り返ることも簡単にできるようになります。

jupyter_scheme_sample

Jupyterは、もともとはIPython notebookという名前のプロジェクトであり、IPythonがベースとなっていましたが、今はKernelさえサーバ側に組み込まれていればPython以外にも様々な処理系を実行可能となっています。

今回はこのJupyterにCalystoと呼ばれるscheme処理系をKernelとして組み込み、Jupyter notebook上でschemeを動かせるようにします。

利用手順

今回は、以下の流れで環境のセットアップを行いました。前提としてpyenvがインストールされている必要があります。

$ pyenv install 3.4.3
$ pyenv global 3.4.3
$ pip install ipython
$ pip install jupyter
$ pip install calysto-scheme

Jupyterを動かすためには、適当な作業ディレクトリを作成後、jupyterを実行します。

$ mkdir note
$ cd note
$ jupyter notebook

実行するとブラウザが立ち上がり、ディレクトリ内の一覧が出てくるので、左上の「new」から「Calysto Scheme 3」を選択します。

jupyter_scheme_setup1

あとは、コードブロックにコードを書いて、実行してみると結果が表示されます。

jupyter_scheme_setup2

TIPS : githubでのnotebookの保管

ブラウザ上で作成したnotebookは、作業ディレクトリ上に*.ipynbという拡張子で保存されます。

このnotebookをgithub上に上げると、実行結果も含めたnotebookをそのままgithubのwebページから確認できるようになります。

sicp/x115.ipynb at master · masuwo3/sicp

実際にgithub上でコードを実行することはできませんが、過去の振り返りには便利だと思います。

おわりに

昔に一度SICPを勉強していた時は、EmacsやGaucheの使い勝手などが原因で、なかなかしんどい思いをしていましたが、今回はJupyterのおかげで簡単にコーディングや実行ができそうです。

コードが複雑になったときにどこまで対応できるかわかりませんが、とりあえずはこの形で勉強を進めていこうと思います。

参考資料