#:g1: anaphoric-variantsの紹介

Posted 2014-10-02 22:15:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の276日目です。

anaphoric-variantsとはなにか

 anaphoric-variantsは、HexstreamことJean-Philippe Paradis氏作のアナフォリックマクロの一種です。

パッケージ情報

パッケージ名anaphoric-variants
Quicklisp
プロジェクトサイトanaphoric-variants | Libraries | HexstreamSoft
CL Test Grid: ビルド状況anaphoric-variants | CL Test Grid

インストール方法

(ql:quickload :anaphoric-variants)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 anaphoric-variantsはアナフォリックマクロとしてはちょっと毛色が変わっていて、構文乗っ取り型のマクロです。

(anaphoric it
  (if :foo
      it))

こんな感じに書きますが、ifのフォームでitが使えるようになっているように見えつつも実際は、ifのフォーム自体がanaphoricという構文の引数になっているという感じです。

 標準では

のフォームが定義されています。

(anaphoric it
  (cond (:foo it)
        (T nil)))
;=>  :FOO

(anaphoric it (when :foo it)) ;=> :FOO

(anaphoric it (and (assoc :a '((:a . 1) (:b . 2))) (cdr it))) ;=> 1

(anaphoric it (case :a (:a it) (:b it))) ;=> :A

(anaphoric it (typecase :a (keyword it) (t it))) ;=> :A

(anaphoric it (typecase :a (keyword (list it)))) ;=> (:A)

 caseとかtypecaseあたりは、あまり使い出がなさそうだなと言う感じですが、

(anaphoric (it :type type)
  (typecase :a
    (keyword (list type it))
    (t (list type it)))
;=>  (KEYWORD :A))

のように拡張した構文も用意されています。
また、ユーザーが新たに定義することも可能です。

まとめ

 今回は、anaphoric-variantsを紹介してみました。
アナフォリック系のマクロとしては、itのシンボルの問題も無いですし、割合に使い勝手も良い感じではないでしょうか。

comments powered by Disqus