実践Common lispを読み始めた-第9章 マクロ:ユニットテストフレームワーク

Unitテストを題材に、Lispで書いたらこんなに簡単になるよという話。
関数とマクロを使って、ボトムアップフレームワークを作っていく。

(defun report-result (result form)
  (format t "~:[FAIL~;pass~] ... ~a~%" result form))

(defun test-+ ()
  (report-result (= (+ 1 2) 3) '(= (+ 1 2) 3))
  (report-result (= (+ 1 2 3) 6) '(= (+ 1 2 3) 6)

のようにテストケースの式自体とreport-resultがレポート用に使う式に同じ式を2回書くのは面倒だし、間違いやすい。
こんなときに、

(defmacro check (form)
 `(report-result ,form ',form))

というマクロを組むと関数test-+が

(defun test-+ ()
 (check (= (+ 1 2) 3))
 (check (= (+ 1 2 3) 6)))

にまとめられる。確かにマクロじゃないとうまくいかないな。これは便利だと思った。