2012-09-14 9 views
12

私は将来のトークンの配列を取得するにはClojureのClojureでマクロをマップするにはどうすればよいですか?

(map future exprs) 

で次の操作を実行しようとしました。 futureは、マクロではなく、機能そのものであるため、残念ながら、これはERRS。

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

私はmmapやマクロの地図を探していたとします。

+3

あなたは、ラムダを使用してみましたか? – Marcin

答えて

15

ところで、既にマルチンで述べたように、ラムダ(無名関数)を使用

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で起こることです)、あるいは他の方法で見つけることができます。

+0

... 'map'の代わりに' mapv'を使用しますか? ... '(DEFN [は、expr](mapv番号(将来%)は、exprを)延期)'あなたは、例えばにして評価を強制することができ – Thumbnail

+0

私はドールンもこの目的のために存在すると思っていますが、現時点でそれを見る時間はありません。 – Bill

+5

'doall'はあなたが望むものです。 。ドーランは、それを実現する順番を忘れる。 – Thumbnail

関連する問題