Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Clojure中映射宏?_Clojure_Macros_Higher Order Functions - Fatal编程技术网

如何在Clojure中映射宏?

如何在Clojure中映射宏?,clojure,macros,higher-order-functions,Clojure,Macros,Higher Order Functions,我尝试在Clojure中执行以下操作 (map future exprs) 获取一系列未来代币。不幸的是,这是错误的,因为future本身就是一个宏,而不是一个函数 在保持map语法的同时,是否有办法使此功能正常工作?我不想使用for宏(只是出于个人风格) 我想我正在寻找一个mmap或宏映射。正如Marcin所说的,使用lambda(匿名函数) 编辑 顺便说一下,如果您使用map创建一组要在其他线程中执行的任务,您可能会遇到问题map是懒惰的,只有在有人要求时,才会创建未来。您需要强制对其进行

我尝试在Clojure中执行以下操作

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