如何在Clojure中映射宏?
我尝试在Clojure中执行以下操作如何在Clojure中映射宏?,clojure,macros,higher-order-functions,Clojure,Macros,Higher Order Functions,我尝试在Clojure中执行以下操作 (map future exprs) 获取一系列未来代币。不幸的是,这是错误的,因为future本身就是一个宏,而不是一个函数 在保持map语法的同时,是否有办法使此功能正常工作?我不想使用for宏(只是出于个人风格) 我想我正在寻找一个mmap或宏映射。正如Marcin所说的,使用lambda(匿名函数) 编辑 顺便说一下,如果您使用map创建一组要在其他线程中执行的任务,您可能会遇到问题map是懒惰的,只有在有人要求时,才会创建未来。您需要强制对其进行
(map future exprs)
获取一系列未来代币。不幸的是,这是错误的,因为future
本身就是一个宏,而不是一个函数
在保持map
语法的同时,是否有办法使此功能正常工作?我不想使用for
宏(只是出于个人风格)
我想我正在寻找一个
mmap
或宏映射。正如Marcin所说的,使用lambda(匿名函数)
编辑
顺便说一下,如果您使用
map
创建一组要在其他线程中执行的任务,您可能会遇到问题map
是懒惰的,只有在有人要求时,才会创建未来。您需要强制对其进行评估(这是repl打印结果时在repl中发生的情况)或找到其他方法 你试过使用lambda吗?相关:。。。因此,请使用mapv
而不是map
(defn defer[exprs](mapv#(future%)exprs))
您可以强制将评估放入,例如(into[](map#(…)xxx)
我认为dorun也是为了这个目的而存在的。不过现在没有时间查找它。doall
是您想要的。dorun
在实现它时忘记了序列。
user=> (map and [true false 0 nil])
java.lang.Exception: Can't take value of a macro: #'clojure.core/and (NO_SOURCE_FILE:1)
user=> (map #(and %) [true false 0 nil])
(true false 0 nil)