在结束时,我们如何应用and
或任何其他宏到列表?
这不起作用:
(apply and '(true false))
Run Code Online (Sandbox Code Playgroud)
因为apply
不能取宏的价值.
那么,检查列表中所有元素是否为真的最佳方法是什么?
Kai*_*nad 35
你可以这样做:
(every? identity '(true false))
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此主题.
在Clojure中,宏不是一流的东西,它们并不像函数那样构成,你不能将它们传递给其他函数,而你却不能apply
.这是因为在完成任何申请之前,他们已完成并完成.
习惯上将函数中的宏包装到函数中apply
或将它们传递给函数
(defmacro my-macro [x y z] ...)
(apply #(my-macro %1 %2 %3) [1 2 3])
(map #(my-macro) [1 2 3] [:a :b :c] [a b c])
Run Code Online (Sandbox Code Playgroud)
匿名功能读取器宏#(
使这非常容易,不是一流的宏不是真的不是一个不便.只是尽量记住宏观俱乐部的第一条规则