#:g1: anaphora.pltの紹介

Posted 2014-07-19 09:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の200日目です。

anaphora.pltとはなにか

 anaphora.pltは、wcy氏作のRacketのアナフォリックマクロ集です。

パッケージ情報

パッケージ名anaphora.plt
PLaneTPLaneT Package Repository : PLaneT > wcy > anaphora.plt

インストール方法

 Racketから

(require (planet wcy/anaphora:1:0))

で使えます。

試してみる

 Racketにもanaphoraがあったので無駄に比較してみましょう。
Racket版anaphoraもCommon Lisp版anaphoraとは無関係。定義されている構文もオリジナルのものが混っています。
定義されている構文は以下の通りです。

 これらのうち、aif、awhen、aandはお馴染ですが、

(aif (list-ref '(1 2 #f 3) (random 4))
     it
     'other)
;=> 1 or other

(awhen (list-ref '(1 2 #f 3) (random 4)) (display it)) ;>>> 1 or 2 or 3

(aand 'foo it) ;=> it

aif-not、aprognというのがオリジナルかなと思います。

(aif-not (list-ref '(1 2 #f 3) (random 4))
         it
         'other)
;=> #f or other

(aprogn (list 1 2 3) (cdr it) (cdr it)) ;=> '(3)

aprognの動作は、各々の式が都度itで束縛されるので、代入っぽい操作に使えそうです。
展開は、

(let ((it (list 1 2 3)))
  (let ((it (cdr it)))
    (cdr it)))

のようになる様子。RacketにもSchemeにもprognはないのに何故にprognなのか。

まとめ

 今回は、anaphora.pltを紹介してみました。
Scheme(特にRacket)だとCommon Lispのようなgeneralized booleanはスタイル的にあまり活用されていないようなのでアナフォリックマクロのようなものも、あまり使いでがない感じですね。

comments powered by Disqus