如何在Clojure中映射宏?

MRo*_*lin 13 macros clojure higher-order-functions

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

(map future exprs)
Run Code Online (Sandbox Code Playgroud)

获得未来令牌的seq.不幸的是,这个错误future本身就是一个宏,而不是一个函数.

有没有办法在保持map语法的同时完成这项工作?我宁愿不使用for宏(只是个人风格).

我想我正在寻找一张mmap或宏观地图.

Bil*_*ill 15

正如Marcin所说,使用lambda(匿名函数)

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)
Run Code Online (Sandbox Code Playgroud)

编辑

顺便说一句,如果您正在map创建一系列要在其他线程中执行的任务,那么您可能会遇到问题.map是懒惰的,直到事情要求它们才会创造未来.您需要强制对其进行评估(这是repl打印结果时在repl中发生的情况)或者找到其他方法.

  • `doall`就是你想要的.`dorun`在实现它时会忘记序列. (6认同)