マクロを生成するマクロで表引き

表引きのための手続きとマクロを簡単に生成できるマクロを書いてみた。
こういう風に使える。

(define-static-table tbl0
                     ;; key→data手続の定義
                     ((key->data key => data)

                     ;; key→data*マクロの定義
                      #(key->data* key => data))

                     ;; 表の項目名部分
                     #(key data)

                     ;; 表のデータ
                     (a 2)
                     (b 4)
                     (c 6))

このように書くと、key→data手続とkey→data*マクロが定義される。

(key->data 'a) ;; => 2
(key->data* a) ;; => 2

マクロの方は引数をquoteしていないのに注意。
このマクロ自体は非常にどうでも良い内容だけど、nmoshの次期expanderには"マクロをhookしてメタデータを付与する"機能(文脈クエリ)を付けるつもりでいて、表引きに関連した操作は全てこのような単機能のマクロを経由して書くようにする。