※注: シンボルが競合しないようなアナフォリック・マクロの作り方の質問ではありません。

アナフォリック・マクロを提供するライブラリには、anaphora、arnesi、kmrcl等々がありますが、これらを混ぜて使うとitが競合します。

また、競合しないようにするとなると、

(kl:aif foo kl:it
        (anaphora:aand kl:it anaphora:it))

のようにパッケージ名を明記することになり残念です。

itは共通のパッケージから継承するようにすれば、大体解決しますが、もっとスマートな方法はないでしょうか。

なお既存のライブラリにコード修正は加えないことを前提とします。

(intern "IT" :cl-user)

(defpackage :kmrcl
  (:import-from :cl-user :it))


(defpackage :anaphora
  (:import-from :cl-user :it))


(ql:quickload :anaphora)


(ql:quickload :kmrcl)


(in-package :cl-user)

(anaphora:aif 'foo
              (kmrcl:aif it it))
;=>  FOO