Macros clojure宏中的#/%嵌套

Macros clojure宏中的#/%嵌套,macros,clojure,Macros,Clojure,我知道嵌套#,%是不好的——然而,我经常发现自己编写简短的在线匿名函数,结果正好有两个级别的#/% 因此,我很好奇,有没有一种方法可以告诉clojure每个%都绑定到最近的(最小的包围圈)上 谢谢 clojure中不支持匿名函数的嵌套 编辑:我所说的“匿名函数”是指#(…),而不是(fn…)。抱歉造成混淆。使用嵌套匿名函数是完全可以的。你只需要使用非速记语法 #(foo (bar %1) (baz %2)) 相当于 (fn [x y] (foo (bar x) (

我知道嵌套#,%是不好的——然而,我经常发现自己编写简短的在线匿名函数,结果正好有两个级别的#/%

因此,我很好奇,有没有一种方法可以告诉clojure每个%都绑定到最近的(最小的包围圈)上


谢谢

clojure中不支持匿名函数的嵌套


编辑:我所说的“匿名函数”是指
#(…)
,而不是
(fn…
)。抱歉造成混淆。

使用嵌套匿名函数是完全可以的。你只需要使用非速记语法

#(foo (bar %1)
      (baz %2))
相当于

(fn [x y]
  (foo (bar x)
       (bax y)))
完整变量可以任意嵌套。此外,如果您倾向于使用<代码> MAP>代码>使用<代码> fn>代码>批量,请考虑使用<代码> < <代码> >(这在我看来更清晰):

做的事情和

(for [row (range 3)]
  (for [col (range 3)]
    (+ (* 10 row) col)))

我读了两遍,但不太明白你的问题是什么。你能澄清一下吗?它可能会帮助你得到一个更有用的答案。
((fn[x](fn[y][xy])1)2
这并不像丹雷所说的那样正确。不支持对匿名函数嵌套使用#(…)读取器宏;使用“fn”嵌套是可以的。当然可以。我的评论是针对读者宏的,这是问题的主题。对于所有的反对票:imho,滥用“匿名函数”不是Alex的错——这是我的错,因为在最初的问题中,我混淆了#(…%…)w/匿名函数。感谢编辑您的答案Alex,现在它更有意义了。我怀疑您指的是reader宏,但最好弄清楚它。:)
(for [row (range 3)]
  (for [col (range 3)]
    (+ (* 10 row) col)))