不太確定這是您要搜索的內容,但可能是宏模板。這是我會怎麼寫代碼:
(use 'clojure.template)
(do-template [name n]
(defn name [x] (apply * (repeat n x)))
square 2
cube 3)
user> (cube 3)
;=> 27
對於更復雜的類型相似的任務,你可以寫一個宏包do-template
到其參數進行一些改造,如:
(defmacro def-powers-of [& ns]
(let [->name #(->> % (str "power") symbol)]
`(do-template [~'name ~'n]
(defn ~'name [~'x] (apply * (repeat ~'n ~'x)))
[email protected](->> ns
(map #(vector (->name %) %))
flatten))))
(def-powers-of 2 3 4 5)
user> (power3 3)
;=> 27
user> (power5 3)
;=> 243
PS:如果你剛剛開始使用Clojure,那麼這個宏可能看起來很尷尬,不要因爲它而放棄! ;-)
我沒有得到你的問題。你想創建功能的集合:正方形,立方體等? –
是的。我寧願採用(power 2)語法,並用power2,power3(立方體)替換它,等等。當然,有一個數學庫,在生產代碼中,我不會這樣做,但我試圖將原始函數映射爲它將如何接收它的參數,並且在REPL中試用這個函數非常有幫助。 – octopusgrabbus