プログラミングを頑張る日記

プログラミングを勉強して、ハッカーになろう

Common Lispを頑張る(61)

「Land of Lisp」も16章まで来ました。ついに皆大好きマクロの話です。

細かい話はすっとばして、例を見ます。
letを使うと括弧が多くなってウザいのでもっとスマートなletが欲しい、というのが例ですね。

CL-USER> (defmacro let1 (var val &body body)
           `(let ((,var ,val))
              ,@body))
LET1
CL-USER> (let1 foo (+ 2 4)
           (* foo foo))
36
CL-USER> (macroexpand-1
          '(let1 foo (+ 2 4)
           (* foo foo)))
(LET ((FOO (+ 2 4)))
  (* FOO FOO))
T
CL-USER>

バッククォートの中の式は基本的に評価されず、コンマを使うことで評価対象とでき、
,@は評価した結果のリストを外のリストと繋ぎあわせるのでした。楽勝ですね。

…楽勝ですねこの章。という訳で今日はもうここまで。
眠いけど新年せっかく更新が続いているので姑息な更新でした。僕は卑怯者だ…!
というわけでおやすみなさい。