式一つ分のコメントアウト

common lispで開発していると、たまに式一つ分だけコメントアウトしたくなることがある。
そういった機能は標準ではないかと思っていたが、条件付き読み込み(?)を使えば似たようなことが出来ることに気がついた。

;; (+ 20 30)をコメントアウト
> (+ 10 #+c (+ 20 30) 40)
--> 50

;; #-と#+を併用して使用する式を切り替える
> (+ 10 #+c (+ 20 30) #-c 40)
--> 50

> (+ 10 #-c (+ 20 30) #+c 40)
--> 60

いろいろ試行錯誤を繰り返している時とかに、役に立つかもしれない。

追記(2010/03/31): *features*

#+#-は、*features*を見て式を読み込むかどうかは判断するので、使う式を切り替えるだけなら次のようにしても良いかもしれない。

> *features*
--> (:ASDF :ANSI-CL :COMMON-LISP :SBCL :SB-DOC :SB-TEST ...)

> (defun switch (sym)
    (if (find sym *features*)
        (setf *features* (remove sym *features*))
      (push sym *features*)))
--> SWITCH

> (+ 10 #+c (+ 20 30) #-c 40)
--> 50

> (switch :c)
> (+ 10 #+c (+ 20 30) #-c 40)
--> 60

> (switch :c)
> (+ 10 #+c (+ 20 30) #-c 40)
--> 50