2013-02-09 36 views
0

我嘗試編寫以數據集作爲參數並在單個xy圖上查看來自數據集的所有數據的宏。 例如,我創建數據集如何在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慣用的方式,這在某些情況下不起作用。 我已經嘗試了各種各樣的狂野技巧,以獲得數據集的列名作爲評估參數,但這並沒有奏效。

在宏的宏展開時,是否存在評估表達式的方法?

+0

爲什麼你要在這裏使用宏?我認爲職能將完成這項工作。 – 2013-02-12 09:51:35

回答

0

你不需要在這裏使用宏。普通功能將完成這項工作:

(defn figure [data] 
    (let [x (range (nrow data)) 
     [h & t] (:column-names data)] 
    (with-data data 
     (let [plot (xy-plot x ($ h))] 
     (doseq [col-name t] 
      (add-lines plot x ($ col-name))) 
     (view plot))))) 
+0

它很漂亮,尼基塔,非常感謝俄羅斯! – user2055205 2013-02-12 17:01:49