13

Clojureで次のことを試してみました

(map future exprs)

将来のトークンのシーケンスを取得します。残念ながら、これfutureは関数ではなくマクロであるため、エラーになります。

map構文を維持しながらこれを機能させる方法はありますか?私はむしろforマクロを使用したくありません(個人的なスタイルの問題として)。

mmapまたはマクロマップを探していると思います。

4

1 に答える 1

15

Marcinがすでに述べたように、ラムダ(無名関数)を使用します

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で発生することです)、または他の方法を見つける必要があります。

于 2012-09-14T03:29:47.167 に答える