2014年2月13日木曜日

How To SLIME

SLIME

LispのためのIDE(統合開発環境)、ということでここにある。
詳しくは「SLIME Lisp」などでググってもらえればわかると思う。
Land of Lispを読むにあたって結構便利だということがわかってきたのでまとめてみる。
なお、ほぼググった内容のまとめなので。

あ、Emacsの話です。

インストール

たしか

sudo apt-get install slime

して終わらせた。
.emacsもろくに書かなくて平気だったと思う。

これだけだとあんまりなので、ググって見つけたサイトのインストール方法を拝借してみる。

上記の本家サイトからGithubのページへ行ける。
そこからクローンないしダウンロードしたディレクトリを.emacs.d配下にslimeという名前で置く。
あとは.emacs(or .emacs.d/init.el)に以下を記述。

;; Clozure CLをデフォルトのCommon Lisp処理系に設定
(setq inferior-lisp-program "ccl")
;; ~/.emacs.d/slimeload-pathに追加
(add-to-list 'load-path (expand-file-name "~/.emacs.d/slime"))
;; SLIMEのロード
(require 'slime)
(slime-setup '(slime-repl slime-fancy slime-banner))

なおこの説明ではLisp処理系にはClozure CLを使っているが、自分の処理系に合わせて変えてもらって構わない。僕のinit.elには”sbcl”で書かれている。

使い方

とりあえずemacs起動してM-x slimeで対話環境(REPL)が出る。
もちろんC-p C-nC-a C-eなどEmacsキーバインドが使える。
履歴を辿りたいときはC-↑C-↓でもできるが、M-p M-nを推奨。
大抵ミスるので、そういう時は別ペインに分割されて表示される内容から、選択する数字をタイプする。
例えばこんな感じ。

The variable HOGE is unbound.
   [Condition of type UNBOUND-VARIABLE]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [ABORT] Abort thread (#<THREAD "new-repl-thread" RUNNING {1005EEFA03}>)

Backtrace:
  0: (SB-INT:SIMPLE-EVAL-IN-LEXENV HOGE #<NULL-LEXENV>)
  1: (EVAL HOGE)
 --more--

この場合「hoge」という変数はないと言われている。
Backtraceについては特に言わなくてもいいだろう。
エラー周りの処理を吐く、どこの言語でもあるやつだ。
問題はRestartsの方で、REPLを再開するのに3種類の選択肢が用意されている。
内容を読んで0,1,2のどれかをタイプすればよい。

Lispソースから

本題はこちら。
仮にhoge.lispみたいなlispのソースがあったとする。
そのソースをemacsで開いて、SLIMEを起動。
すると以下のことができるようになる。
C-c C-c:関数一つのコンパイル
C-c C-k:ソース全体のコンパイル
C-c C-z:REPL呼び出し
要するにこれらを上手く使いこなせば、ターミナルからのコンパイルだとかプログラム実行だとかにソースと行ったり来たりをしなくて済むというわけだ。
emacsを起動してソースを開いてslimeを起動する。
そうしてコーディングをし続けて、途中でたまにC-c C-cだとかC-c C-zとかで確認すればいい。

いやだが待てよ? 評価は? C-jか?(それはelisp)
上記のコンパイル関連はあくまで「関数」に関してのコマンドだ。コンパイルした関数をそのままREPLで使えるという話。
たとえば関数fugaを定義したあと(fuga 10)を評価したい時、いちいちREPLに戻って(fuga 10)とやるのだろうか。
1回ならそれもいいが、もしfugaが頻繁に書き換わる関数だったら? その度に実行動作を確認したい場合は?
fugaを書き換えてC-c C-cしてペインを移動してM-pで直前の(fuga 10)を呼び出して実行。
そういう手もあるだろう。
でももっといい手がある。上記のコマンドと同じように、ソースの画面からC-M-xで直接評価できる。
これでペインをまたいで履歴を一個戻して再実行、の必要がなくなる。C-c C-cしてC-M-xこれで済む。
正直これの便利さを言いたいがためにこの投稿を書いたといってもいい。
もっと詳しいことは下記の記事とか参考になる。
SLIMEのキーバインド - pattersonの日記
本家本元のマニュアルも一応見に行ったのだけど何故か読む気にならなかった。
表の形にしてあるだけでどうしてこうも読みやすく感じるのだろうか。

まとめ

まずは

sudo apt-get install slime

そして

C-x C-f hoge.lisp
M-x slime

その後は
1.コードを書く
2.C-c C-c & C-M-X
1と2を繰り返す。

参考

モダンCommon Lisp第3回: SLIMEの使い方 基礎編 | ありえるえりあ

Modern Common Lisp: 第5回 SLIMEの使い方 開発サイクルについて

sbcl+slimeの環境を整える - yutoichinoheの日記

0 件のコメント:

コメントを投稿