Я пытаюсь написать макрос, который принимает данные в качестве аргумента и рассматривает все данные из набора данных на одном xy-plot. Например, я создать DataSetКак использовать макрос в clojure для просмотра xy-plot со многими строками?
(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#))))
[email protected](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 идиоматический путь, и это не работает в некоторых случаях. Я пробовал всевозможные дикие трюки, чтобы получить имена столбцов набора данных в качестве оцененного аргумента, но это не сработало.
Существует ли метод для выражения выражения при макрораспределении времени в макросе?
Почему вы хотите использовать макрос здесь? Я думаю, что функция будет выполнять эту работу. –