このページでは、主に 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 というものがある。 パッケージシステムを定義するためのユーティリティみたいだが,これを入れておくと何かと便利。
quicklisp とは Commo Lisp 向けのライブラリ管理システム。かなり安定していて非常に便利。以前は asdf-install というものがあったが、少し不安定であったし、現在はもうメンテナンスされてはいない。
本家のサイトQuicklispから quicklisp.lisp というファイルをダウンロードする。次に、sbcl であれば
sbcl --load quicklisp.lispとするとか、処理系を起動してから (load "quicklisp.lisp") とするなどして このファイルを読み込む。そして
(quicklisp-quickstart:install)を評価すればインストールされる。Linux ではホームディレクトリの下に
quicklispというディレクトリができて、その下にいろいろなものがインストールされる。そして
(ql:add-to-init-file)を実行すれば、起動時に読み込まれるファイルに初期設定を書込んでくれる。 私は
quicklispというディレクトリ名を.quiclisp に変更した。その場合は、初期設定の部分を
#-quicklisp
(let ((quicklisp-init (merge-pathnames ".quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))
などと変更することになる。
(ql:quickload :hunchentoot)とすれば、依存するライブラリも含めてダウンロードしてインストールしてくれる。 Quicklisp は今のところ月一回くらいのペースでアップデートされているようで、
(ql:update-all-dists)とすれば、自動でライブラリをアップデートしてくれる。また Quicklisp 自身の アップデートは
(ql:update-client)とする。こちらの更新頻度はそれほど高くなさそう。またライブラリの検索は
(ql:system-apropos "ライブラリ名の一部")とする。
sbcl はそのままでは readline の機能が使えない。これでは不便なので, rlwrap をインストールする。
これを使えば, コマンドラインで
$ rlwrap sbcl
のようにして sbcl を起動することによって readline の機能が使える。
clisp は自前で readline が使えるので必要ない。