データセットを引数として取り、データセットからのすべてのデータを単一のxyプロットで表示するマクロを作成しようとしています。たとえば、データセットを作成します
(def test-data
[["RECALL" "CAFE" "CLIPPERS"]
[0 0 0]
[14 15 13]
[160 146 155]])
そしてこれを書く
(defmacro figure
[datas]
(let [x `(range 0 (nrow ~datas)) y `(rest (:column-names ~datas))]
`(let [datas# ~datas]
(with-data datas#
(doto
(xy-plot ~x ($ (first (:column-names datas#))))
~@(map (fn [arg] `(add-lines ~x ($ ~arg ))) (eval y));;this line, wheh rest of columns have added to xy plot, get me a trouble
view)))))
(figure test-data)
しかし、コードのevalに問題があります。これはClojureの慣用的な方法ではなく、場合によっては機能しないと思います。評価された引数としてデータセットの列名を取得するためにあらゆる種類のワイルドなトリックを試しましたが、これは機能しませんでした。
マクロ展開時にマクロで式を評価する方法はありますか?