在clojure中,如何将'和'应用到列表中?

vie*_*bel 23 clojure

在结束时,我们如何应用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)

有关更多信息,请参阅此主题.


Art*_*ldt 6

在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)

匿名功能读取器宏#(使这非常容易,不是一流的宏不是真的不是一个不便.只是尽量记住宏观俱乐部的第一条规则

  • 但是当宏接收到可变数量的参数时,这种方法将崩溃。 (2认同)

小智 5

您还可以这样做: (apply = true '(true false))