@uents blog

Code wins arguments.

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)らしいです。

SchemeRacketは言語仕様で所々違いはあるのですが、 SICPのサンプルコードは おおよそRacket処理系で動かせますし、ライブラリが豊富なので使い勝手はよいと思います。

僕の場合はHomebrew Caskで取得しました。

% brew cask install racket

DrRacketをつかう

Homebrew CaskでRacketをインストールすると、DrRacketというIDEがついてきます。

  • Launchpadやターミナルなどから~/Applications/DrRacket.appを起動します
  • 画面下部のREPLでSchemeのコードを直接入力し実行します
  • または [ファイル]→[開く...] からSchemeソースコードファイルを開き [実行] をクリックします

drracket

ソースコードファイルで開く場合は、そのファイルの先頭に

#lang racket

のようにシェバンを書く必要があります。

また、[実行] の替わりに [デバッグ] をクリックすると、ブレイクポイントを設定したり ステップ実行を行うこともできます。§4の処理系のように抽象度の高いプログラムを追う時に重宝します。

EmacsSchemeを動かす

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が起動します。

emacs-geiseir

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を使っての設定方法に書き換えないと…


※「SICP読書ノート」の目次はこちら