Leiningen - sicp/ikoma-sicp GitHub Wiki
Leiningen
どうやら全員処理系はClojureを使うようなので、Clojure関係のツールを紹介していきます。SICPではClojureの機能に依存したコードを書く機会はほとんどないと思いますが、Clojureを実際に使うようになってくると非常に便利です。以下のようなことが簡単にできます。
- 依存するライブラリをproject.cljに記述するだけで簡単に引っ張ってこれる
- クラスパスの通ったREPLを呼べる
- テストを簡単に走らせる
- (要追記)
インストール
基本的にはleinというシェルスクリプト1つで大丈夫というお手軽設定です(Clojureのインストールすら必要ない!!!)。以下では~/binがPATHの通ったディレクトリだと仮定します(ない人は作成して、作成した後にPATHを通してください)。以下のコマンドを実行すると、とりあえずleinの機能が使えるようになります。
cd ~/bin
wget http://github.com/technomancy/leiningen/raw/stable/bin/lein
chmod +x lein
lein self-install
lein help
とやってヘルプが見れたらOKです。取ってくる依存関係はproject.cljに記述します。参考までに書いておくと、こんな感じになっています(後述しますが、lein new project-name
とやると雛形を作ってくれます)。
(defproject sicp-practice "0.0.1-SNAPSHOT"
:description "syou6162のSICPの練習問題置き場"
:dependencies [[org.clojure/clojure "1.3.0"]
[org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [swank-clojure "1.3.2"](/sicp/ikoma-sicp/wiki/swank-clojure-"1.3.2"))
例: テストの実行
clojure-contribはsequenceやstringなどの便利関数をまとめたようなパッケージ、swank-clojureはREPLから実行するときに非常に便利なパッケージです。何かやってみたほうが雰囲気が伝わると思うので、syou6162の書いたSICP用のテストがきちんと通るかやってみましょう。lein deps
で依存するライブラリを取得、lein test
でtest以下のディレクトリに配置されているテストを全て実行することができます(もちろん選択して実行することもできます)。
cd ikoma-sicp/syou6162/sicp-practice
lein deps
lein test
自分のプロジェクトを作る
人のテストを実行してもあまり面白くないので、自分のプロジェクトを作ってみることにしてみましょう。XXXさんがSICP用の練習ディレクトリsicp-practiceを作ることにします。
cd ikoma-sicp/XXX
lein new sicp-practice
# srcディレクトリ、testディレクトリ、libディレクトリやproject.cljの雛形が生成されます
lein test
FIXMEなんとかと出れば成功です。srcディレクトリ以下にSICPで必要になって書いた関数やデータを置くようにして、testディレクトリ以下にその関数のテストなどを書くようにするのがオススメです。練習問題毎やsubsection単位毎などでファイルを作っていくことが多いと思いますが、1-1.clj
のような名前はうまく実行できないので、1_1.clj
のように付けるなどして罠を避けましょう。
REPLを使う
REPLとはRead-Eval-Print-Loopの略のことだそうで、対話的実行環境のようなものです。SICPでは4章でREPLっぽいものを作るようなので今から楽しみですね。Clojure + Emacs環境のセッティング(MacOSX Lion 10.7) - やぐブロのメモに従って、clojure-modeなどのインストールを済ませておきます。XXXさんがREPLを立ち上げる場合
cd ikoma-sicp/XXX/sicp-practice
lein swank &
とやるとサーバーが立ち上がるので、Emacsを使って接続します。M-x slime-connect
とやってアドレスとポートを指定すると接続できるはずです。その上で、ikoma-sicp/XXX/sicp-practice/src/sicp_practice/core.clj
と開いて(println "Hello World!")
と書いた上でC-x C-e
とやれば画面の隅にはろーわーるどが実行できたのが見えるはずです。swank経由でサーバーを立ち上げると依存関係などを考慮した上であれこれできるのでオススメです。
以下slimeの使い方やキーバインドなどで参考になりそうなリンクです。
- Clojure + Emacs のキーバインド - hozumiの日記
- Learning Clojure: Favourite keys for EMACS and SLIME
- SLIME勉強会@新宿 4/26 (土) 13:00〜20:00 (2) - 'T - cadr group
Emacs以外の方
vimなどでも似たようなことができるはずですが、まだよく分かりません。よい環境設定などがあったらwikiにどんどん書き込んで行きましょう。