このページでは、主に 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 が使えるので必要ない。