CLISPとSBCLをSLIMEで選択的に使用しよう

id:hayamizさんからもらったコメントでdefine-setf-expanderとget-setf-expansionを知った。
その途中でdefsetfなる関数も発見して試していたのだけれども、どうも何かおかしい。以下のURLの例が、エラーを吐いて動かない。
http://franz.com/support/documentation/8.0/ansicl/dictentr/defsetf.htm
いやいやそんなわけないじゃないかと思い、スペルミスのチェックや意味の解釈などを考えてみたのだけれども、そこは問題ない。


じゃあなんだー!


実は処理系の違いでした。
わたしが使っているのはSBCLだけれども、例に示されていたのはCLISP。試しにCLISPをシェルから起動して命令を入れてみたら、全く問題なく動きました。
まさかこんなに早く処理系の違いに出会うとは思ってなかったので動揺。


せっかくなのでSLIME上でCLISPSBCLも使えるようにしてみようと思い立ち、ちょっとEmacs Lispについて調べて書いてみた。

;;(or SBCL CLISP)
(defun slime-on (x)
  (progn (setq inferior-lisp-program x)
         (slime)))
(defun slime-clisp ()
  (interactive)
  (slime-on "clisp"))
(defun slime-sbcl ()
  (interactive)
  (slime-on "sbcl"))

これで、slime-clispCLISP上SLIMEが起動するし、slime-sbclSBCL上SLIMEが起動する。同時起動も可能でべんりー。
ただ、inferior-lisp-programを書き換えちゃってるので、Emacsを閉じずにM-x slimeでSLIMEを起動すると、最後に起動した方の処理系が使われると思われ。


setfについてはまだ書けるほどのことはわかってないっす。


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2007/9/14追記:
もちろんSLIMEの基本的な設定は必要です。
http://d.hatena.ne.jp/suu-g/20070807/1186501210
など参照のことplz。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-