自作のLispの実装でちょっと面白いコードがあったのでメモ。

register-macro というマクロを定義する関数があったとして、それを使ってマクロを定義するマクロdefmacroを定義するコードは

(register-macro 'defmacro
  (lambda (name params &body body)
    `(register-macro ',name
       (lambda ,params ,@body))))

https://github.com/tyfkda/lisp2js/blob/master/src%2Fbasic.lisp#L1-L4

同じことを2度書いてるようで面白いと思った。