SICP 読書ノート#10 - SICPのためのプログラミング環境構築
「§2.2.4 図形言語」に入る際にグラフィックスまわりのライブラリが必要になってきたので、 遅ればせながらScheme処理系であるRacketやEmacsの環境構築方法をまとめてみました。
- (2015/04/29追記) 内容が古くなってきたので全体的に加筆/修正しました
- (2015/12/02追記) DrRacketの使い方などを追加しました
PC環境
HomebrewやEmacsの環境構築は以下を参照ください。
Scheme処理系
MITの推奨はRacket(旧PLT-Scheme/DrScheme)らしいです。
SchemeとRacketは言語仕様で所々違いはあるのですが、 SICPのサンプルコードは おおよそRacket処理系で動かせますし、ライブラリが豊富なので使い勝手はよいと思います。
僕の場合はHomebrew Caskで取得しました。
% brew cask install racket
DrRacketをつかう
Homebrew CaskでRacketをインストールすると、DrRacketというIDEがついてきます。
- Launchpadやターミナルなどから
~/Applications/DrRacket.app
を起動します - 画面下部のREPLでSchemeのコードを直接入力し実行します
- または [ファイル]→[開く...] からSchemeのソースコードファイルを開き [実行] をクリックします
ソースコードファイルで開く場合は、そのファイルの先頭に
#lang racket
のようにシェバンを書く必要があります。
また、[実行] の替わりに [デバッグ] をクリックすると、ブレイクポイントを設定したり ステップ実行を行うこともできます。§4の処理系のように抽象度の高いプログラムを追う時に重宝します。
EmacsでSchemeを動かす
DrRacketはデバッガもあり便利なのですが、キーバインドが設定できなかったり エディタそのもの機能は貧弱なため、僕は普段はEmacsを使って実装しています。
そこで、EmacsでRacketを動かすためにGeiserを導入すると便利です。
Geiserのインストール
Emacs Caskで取得できます。Caskファイルに以下を追加し、
(source gnu) (source melpa) (depends-on "geiser")
ターミナルでcask install
を実行します。
% cask install
.emacs.elの設定
Geiserの設定を追加します。
(setq geiser-racket-binary "/opt/homebrew-cask/Caskroom/racket/6.1.1/Racket v6.1.1/bin/racket") (setq geiser-active-implementations '(racket)) (setq geiser-repl-read-only-prompt-p nil) ;; Racket REPL上で(read)の入力を取る際に必要
Racket REPLを起動
Emacsを開きM-x run-racket
とするとRacket REPLが起動します。
REPL上でSchemeのコードを直接書いて行ってもよいですし、
ファイルを読み込みたい場合は,enter "foo.scm"
とすればよいです。
また、拡張子を.scm
としAuto Complete Modeを事前に導入していると、
特にAuto Complete Modeの設定を行わずとも、Auto Completeが自動的に起動するようです。
デバッグ
プリント出力
racket@> (define x 1) racket@> (define y 2) racket@> (display (format "~a ~a ~%" x y))
手続きをトレース
racket@> (require racket/trace) racket@> (trace <procedure name>)
その他
Auto Complete Modeについて
以前に書いた記事が参考になるかもしれません。(かなり古いです)
Emacs Caskを使っての設定方法に書き換えないと…