#:g1: hu.dwim.quasi-quoteの紹介

Posted 2014-07-21 12:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の202日目です。

hu.dwim.quasi-quoteとはなにか

 hu.dwim.quasi-quoteは、dwim.huの人達による拡張されたquasiquoteのライブラリです。

パッケージ情報

パッケージ名hu.dwim.quasi-quote
Quicklisp
CLiKiCLiki: Article not found
Quickdocshu.dwim.quasi-quote | Quickdocs
CL Test Grid: ビルド状況hu.dwim.quasi-quote | CL Test Grid

インストール方法

(ql:quickload :hu.dwim.quasi-quote)

試してみる

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

 このライブラリは、どうも最近整備されていないので、恐らくですが、現在まともにインストールして利用できる人はほとんどいないのではないかと言う感じです。
それはともかく、hu.dwim.quasi-quoteがどんなものかというと、quasiquoteをリストだけでなく文字列やバイナリのストリームに拡張したり、埋め込み言語を展開したりというものです。

(hu.dwim.quasi-quote:enable-quasi-quoted-string-to-string-emitting-form-syntax '*standard-output*)

`str("1 2" ,(reverse (list `str(" 5 6") `str(" 3 4"))) " 7 8") ;>> 1 2 3 4 5 6 7 8 ;=> <no values>

 他バイトストリームで

`bin(1 2)

のように書けたり

bivalentストリームで

`biv(1 2
            ,(list
              " 3 4"
              `biv(5 6 " 7 8")
              #(9 10))
            " 11 12")

こんな感じに書けたりというところですが、リーダーマクロを登録するにあたって利用するストリームも指定しないといけません。
バイトストリーム系のことを考えれば致し方ない気もしますが、どうもこの辺りが使い辛いですね。

 その他、pdfが、

[document
   [info [dictionary "Author" "levy"]]
   [root [catalog "Pages" [indirect-object-reference pages]
                  "StructTreeRoot" [indirect-object-reference structure-tree-root]]]
...

のように書けたり、CSS、JavaScriptが、quasiquote的に書けたりです。

`js(if (and (or (not true) true)
                (not false))
           (print "ok")
           (print "wrong"))

まとめ

 今回は、hu.dwim.quasi-quoteを紹介してみました。
どうもこのライブラリは周りから取り残されているようで、依存しているライブラリがアップデートしたため、そのままでは動かなかったりしますので修正して使いましょう。
dwim.hu関係のライブラリは使い方を知るだけで一苦労です。

comments powered by Disqus