2012-04-09 7 views
5

ネスティング#、%は悪いことを知っていますが、私は自分自身で短い2つのレベルの#/%を持つオンライン匿名関数を書くことがよくあります。clojureマクロでの#/%のネスト

こういうわけで、私は好奇心が強いのですが、各%が最も近い(最小の囲み)#にバインドされている何かをクロージャに伝える方法がありますか?

ありがとうございます!

+1

と同じことを行い、あなたの質問が何であるかはかなり分かりません。あなたはそれを明確にしていただけますか?それはおそらくより有用な答えを得るのに役立ちます。 –

答えて

6

クロージャでは、匿名関数のネストはサポートされていません。

編集:「匿名機能」とは、を意味し、(fn ...)ではありません。混乱の謝罪

+5

'(((fn [x](fn [y] [x y]))1)2)' – danlei

+5

はdanleiと同じではありません。匿名関数の#(...)リーダーマクロのネストされた使用はサポートされていません。 'fn'を使って入れ子にしても問題ありません。 – Gert

+2

はい、もちろんです。私のコメントは、問題の主題だった読者のマクロを対象としていました。 –

8

ネストされた匿名関数を持つことは、まったく問題ありません。あなたはちょうど非略語の構文を使用する必要があります。

#(foo (bar %1) 
     (baz %2)) 

フル変異体は任意にネストすることができる

(fn [x y] 
    (foo (bar x) 
     (bax y))) 

と等価です。あなたはfn多いmapを使用する傾向がある場合にも、(私の意見でより明確に見える傾向がある)の代わりにforを使用して検討してください。

(map (fn [row] 
     (map (fn [col] 
       (+ (* 10 row) col)) 
      (range 3))) 
    (range 3)) 

は、私はこれを2回読ん

(for [row (range 3)] 
    (for [col (range 3)] 
    (+ (* 10 row) col))) 
関連する問題