我尝试编写将数据集作为参数的宏,并在单个 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 惯用的方式,在某些情况下这不起作用。我尝试了各种疯狂的技巧来获取数据集的列名作为评估参数,但这不起作用。
是否存在在宏中的宏扩展时间评估表达式的方法?