Подтвердить что ты не робот

Как сопоставить макрос в Clojure?

Я попытался сделать следующее в Clojure

(map future exprs)

Чтобы получить последовательность будущих токенов. К сожалению, это заблуждается, потому что future сам является макросом, а не функцией.

Есть ли способ сделать эту работу, сохраняя при этом синтаксис map? Я бы предпочел не использовать макрос for (как раз в личном стиле).

Я предполагаю, что ищу карту mmap или макроса.

4b9b3361

Ответ 1

Как уже было сказано Марсином, используйте лямбду (анонимную функцию)

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)

изменить

Кстати, если вы используете map для создания множества задач, которые будут выполняться в других потоках, могут возникнуть проблемы. map ленив, и фьючерсы не создаются, пока что-то их не попросит. Вам нужно будет заставить его оценивать (что происходит в repl, когда repl печатает результат) или найти другой способ.