2014-10-28 26 views
-1

我創建了一個for循環宏的Clojure(基於this answer),這是如下:如何在函數中使用宏?

(defmacro for-loop [[sym init check change :as params] & steps] 
`(loop [~sym ~init value# nil] 
    (if ~check 
     (let [new-value# (do [email protected])] 
     (recur ~change new-value#)) 
     value#))) 

現在,我想用這個for循環的一些功能裏面,但我無法弄清楚如何在一個函數中使用它。有人可以指導我做這個,或者給我一個簡單的使用這個函數的例子嗎?

+3

如果你不知道如何使用它,你是如何編寫這個宏的?在函數內部使用它與從其他地方使用它非常相似。您有任何具體問題,或者您嘗試過的方法無效嗎? – amalloy 2014-10-28 02:51:14

回答

2

如果你把它變成一個功能,通過改變defmacrodefn,然後,例如,

(for-loop '[i 0 (< i 10) (inc i)] '(* 2 i)) 

...產生(剝離部分空間限定符)

(loop [i 0 value__11639__auto__ nil] 
    (if (< i 10) 
    (let [new-value__11640__auto__ (do (* 2 i))] 
     (recur (inc i) new-value__11640__auto__)) 
    value__11639__auto__)) 

研究這看它能做什麼。