MacPortsでSBCLを入れてみる

Common Lispの勉強のためSBCLをMacPortsで入れてみることに。
MacPortsの詳しい解説ははこべにっきさんを参照しましょう。

Finkも入れているので、/opt/localが先にくるようにPATHを設定しておく。

export PATH=/opt/local/bin:/sw/bin:/sw/sbin:$HOME

MacPortsを入れたっきり放置していたためかうまく動かなかったが sync を実行したら
うまく動くようになった。

> sudo port -d sync

まず、Lispの処理系を lisp で検索してみる。SBCLは出てこない。
sbclで検索する。出てきた。

> sudo port -d search lisp
clisp lang/clisp 2.40 The Clisp Common Lisp Implementation
lisp-hyperspec lang/lisp-hyperspec 7.0 The Common Lisp HyperSpec
onlisp lang/onlisp 0.0.1 Lytha Ayth’s texinfo version of Paul Graham’s book On Lisp.

> sudo port -d search sbcl
sbcl lang/sbcl 1.0 The Steel Bank Common Lisp system

SBCL、CLISPもついでにインストールしておく(onlispも意味もなく入れておく)

> sudo port -d install sbcl
> sudo port -d install clisp
> sudo port -d install onlisp

以下はSLIMEの設定。.emacsに貼り付け。
LispUser.netさんを参考にしました。

;;; SLIME
(require 'slime)
(setq slime-net-coding-system 'utf-8-unix)
(add-hook 'lisp-mode-hook (lambda ()
                            (slime-mode t)
                            (show-paren-mode)))
(add-hook 'slime-mode-hook
          (lambda ()
            (setq lisp-indent-function 'common-lisp-indent-function)))
(add-hook 'inferior-lisp-mode-hook
          (lambda ()
            (slime-mode t)
            (show-paren-mode)))
(setq inferior-lisp-program "/opt/local/bin/sbcl")

;; Additional definitions by Pierpaolo Bernardi.
(defun cl-indent (sym indent)
  (put sym 'common-lisp-indent-function
       (if (symbolp indent)
           (get indent 'common-lisp-indent-function)
         indent)))

(cl-indent 'if '1)
(cl-indent 'generic-flet 'flet)
(cl-indent 'generic-labels 'labels)
(cl-indent 'with-accessors 'multiple-value-bind)
(cl-indent 'with-added-methods '((1 4 ((&whole 1))) (2 &body)))
(cl-indent 'with-condition-restarts '((1 4 ((&whole 1))) (2 &body)))
(cl-indent 'with-simple-restart '((1 4 ((&whole 1))) (2 &body)))

(setq slme-lisp-implementations
      '((sbcl ("sbcl") :coding-system utf-8-unix)
        (cmucl ("cmucl") :coding-system iso-latin-1-unix)))

;; CMUCL
;(defun cmucl-start ()
;  (interactive)
;  (shell-command ""))

;; SBCL
(defun sbcl-start ()
  (interactive)
  (shell-command "sbcl --load $HOME/.slime.l &"))

;; GNU CLISP
(defun clisp-start ()
  (interactive)
  (shell-command (format "clisp -K full -q -ansi -i %s/.slime.l &" (getenv "HOME"))))

About this entry