ずっと 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.lispload すればいいのね。
 

 
* (load "~/quicklisp/setup.lisp")
 
T
 
* (ql:add-to-init-file)
 

 
出来た。
 
試しに何か入れてみる。
 

 
* (ql:quickload :cffi)
 

 
行けました。
 
一度 ~/.sbclrcadd-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'"
 

 
としておくのも有りだと思う。
 
 
 

§1633 · Posted By · 5月 20, 2014 · Development · Tags: , , , , , , , , · [Print]