有人可以发布正确的语法来编写一个返回lambda的clojure宏吗? e.g。
(defmacro x [m]
--> returns (fn [m] ...)
答案 0 :(得分:0)
我相信你一直想要'。
用法:(不断x) 返回一个函数,它接受任意数量的参数并返回x。
答案 1 :(得分:0)
请求了一个宏,虽然在这个例子中没有必要,因为这个multiply-by-constant-random
也可以作为普通函数实现。好吧,这给你编译时随机常量而不是运行时。
(defmacro multiply-by-constant-random []
(let [num (Math/random)]
`(fn [m#] (* m# ~num))))
(macroexpand-1 '(multiply-by-constant-random))
; (clojure.core/fn [m__3184__auto__] (clojure.core/* m__3184__auto__ 0.45643974690448996))
(def f1 (multiply-by-constant-random))
(def f2 (multiply-by-constant-random))
(def f3 (multiply-by-constant-random))
(pprint
(for [i (range 1 5)]
(for [f [f1 f2 f3]]
(f i))))
;((0.30553722493029045 0.9164995864143136 0.22367444865206332)
; (0.6110744498605809 1.8329991728286272 0.44734889730412664)
; (0.9166116747908714 2.749498759242941 0.67102334595619)
; (1.2221488997211618 3.6659983456572545 0.8946977946082533))