ずっと CLISP を使ってたんだけど、勉強と実用を兼ねて Steel Bank Common Lisp(SBCL) を入れてみたのでメモ。
環境は Mac OS X 10.9 + 標準で入ってる terminal.app
インストール
インストールはさくっと MacPorts で。
# sbcl は小文字で $ sudo port install sbcl
外部コマンド
CLISP の時は ffcall と一緒にコンパイルしないと外部コマンドの実行とかができなかったけど、SBCL はそんな事無いみたい。
試してみる。
;; 先頭の * はプロンプト * (sb-ext:run-program "date" '("+%Y%m%d") :search t :output t) 20140520
うむ。出来てる。
外部コマンドを実行するときの書き方は処理系毎に違う。
参考:
SBCL Manual 7.7.3 Running external programs
stackoverflow – run-program to launch alsaplayer in sbcl
QuickLisp
QuickLisp を使えるようにする。
REPL で
* (load "path-to/quicklisp.lisp")
で、
* (quicklisp-quickstart:install)
僕の場合は CLISP の時に既にインストール済みなので、もう入ってるぜと言われる。
次に ~/.sbclrc
に(ql:add-to-init-file)
しようとしたところ、
* (ql:add-to-init-file) debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR: Package QL does not exist.
と怒られる。
ん? QLパッケージがない?
QuickLisp の本家サイトを確認。
あ〜、~/quicklisp/setup.lisp
を load
すればいいのね。
* (load "~/quicklisp/setup.lisp") T * (ql:add-to-init-file)
出来た。
試しに何か入れてみる。
* (ql:quickload :cffi)
行けました。
一度 ~/.sbclrc
に add-to-init-file
されちゃえば、次に起動した時は (load "path-to/quicklisp.lisp")
と (load "~/quicklisp/setup.lisp")
は不要。
いきなり次のように新しいパッケージをバンバン入れられる。
* (ql:quickload 'cl-ppcre)
ヒストリー表示
素の SBCL はヒストリー表示(上下矢印で入力履歴を行ったり来たり)が出来ないみたい。
なので、rlwrap で包む。
~/.bash_profile
などシェルが読み込む設定ファイルに次の行を追加すれば、
alias sbcl="rlwrap sbcl"
設定完了。
$ man sbcl
でマニュアルを見るといろいろオプションの使い方が載ってる。
例えば、常にロードしたい「俺用ファイル.lisp」があるなら、
alias sbcl="rlwrap sbcl --load 'path-to/my-file.lisp'"
としておくのも有りだと思う。