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