このページでは、主に Vine Linux 5.x ないしは 6.x での Common Lisp についての備忘録的な内容を書いています。
Common Lisp のプログラミングをするには,Emacs 上で slime を使うと便利。 プログラムを編集しながら,Emacs 内で common lisp を実行したりデバッグしたり, マニュアルを参照したりできる。 slime 自身は,簡単にコンパイル,インストールできる。
cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co slimeのように, cvs でソースを取ってきて, 中身を /usr/share/emacs/site-lisp/slime にでもコピーしておけば使えるようになる。(info ファイルなどは別途 make して, 適当なディレクトリにインストールする。) 私は Emacs の rpm は自作のものを使っているので, ここに src.rpm を置くのはやめておく。
slime 関係で書いた .emacs.el における記述は以下の通り。
(require 'hyperspec)
(setq common-lisp-hyperspec-root
"file:/usr/share/doc/HyperSpec-7.0/HyperSpec/"
common-lisp-hyperspec-symbol-table
"/usr/share/doc/HyperSpec-7.0/HyperSpec/Data/Map_Sym.txt")
(require 'slime-autoloads)
(setq slime-lisp-implementations
'((sbcl ("sbcl") :coding-system utf-8-unix)
(clisp ("clisp") :coding-system euc-jp-unix)))
(setq slime-net-coding-system 'utf-8-unix)
(setq inferior-lisp-program "sbcl --noinform")
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
(add-hook 'lisp-mode-hook (lambda ()
(slime-mode t)
;(show-paren-mode)
(global-set-key "\C-cH" 'hyperspec-lookup)
(global-set-key "\C-cC" 'cltl2-lookup)))
(slime-setup '(slime-fancy))
(autoload 'cltl2-lookup "cltl2" "looking up cltl2 document" t)
(setq cltl2-root-url "file:///usr/share/doc/cltl2-2.0/cltl/")
;;; for skk
(defun skk-slime-space-insert (n)
(interactive "p")
(if skk-henkan-mode (skk-insert) (slime-space n)))
(add-hook 'slime-mode-hook
(lambda()
(define-key slime-mode-map " " 'skk-slime-space-insert)))
(add-hook 'slime-repl-mode-hook
(lambda()
(define-key slime-repl-mode-map " " 'skk-slime-space-insert)))
Common Lisp には ASDF というものがある。 パッケージシステムを定義するためのユーティリティみたいだが,これを入れておくと何かと便利。 また次に紹介する asdf-install を使うときにも利用できる。sbcl には初めから組込まれている。
asdf-install というものもある。これは,TeX で言えば CTAN, perl で言えば CPANみたいな仕組を提供してくれるもので,これを使うことでネットにあるライ ブラリを拾ってきてインストールしてくれる。
例えば cl-ppcre という Perl 互換 の正規表現ライブラリがある。これをインストールするには,sbcl を起動して
(require 'asdf) (require 'asdf-install) (asdf-install:install :cl-ppcre)とすればよい。同様に cffi では,
(asdf-install:install :uffi)とすればよい。この場合は,
CL> (asdf-install:install :uffi) Install where? 1) System-wide install: System in /usr/local/lib/sbcl/site-systems/ Files in /usr/local/lib/sbcl/site/ 2) Personal installation: System in /home/matsu/.sbcl/systems/ Files in /home/matsu/.sbcl/site/のように表示される。2を選択すると,
Downloading 145878 bytes from http://files.b9.com/uffi/uffi-latest.tar.gz ... debugger invoked on a ASDF-INSTALL::KEY-NOT-TRUSTED: GPG warns that the key id 0x112ECDF2C4A3823E (Kevin M. Rosenbergと出るので,1 を選択すれば,コンパイルしてインストールしてくれる。 ただし、今では uffi ではなく cffi をインストールすべきだろう。) is not fully trusted Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [CONTINUE ] Install the package anyway 1: [SKIP-GPG-CHECK] Don't check GPG signature for this package 2: [ABORT ] Exit debugger, returning to top level. (ASDF-INSTALL::VERIFY-GPG-SIGNATURE/STRING "-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQBGo6vyES7N8sSjgj4RAqvEAJ9g1Gs0FExeDmAfqO0eqJjCbMfwCQCeI5PQ a9tbqtLvu3mL9DEUKvjdW/A= =lEcu -----END PGP SIGNATURE----- " #P"/home/matsu/UFFI.asdf-install-tmp") 0]
~/.sbclrc に
(require 'asdf) (require 'asdf-install)と書いておけば,最初の2つは必要ない。
sbcl はそのままでは readline の機能が使えない。これでは不便なので, rlwrap をインストールする。
これを使えば, コマンドラインで
$ rlwrap sbcl
のようにして sbcl を起動することによって readline の機能が使える。
clisp は自前で readline が使えるので必要ない。