我想调用一个匿名函数,它不使用另一个匿名函数的速记符号。
执行以下操作不起作用,因为返回了最后一个评估结果:
user> ((fn [x] (fn [y] (inc y)) x) 3)
3现在,我想有一种方法从外部调用内部匿名函数。
我成功地做到了这一点,但看起来很复杂:
user> ((fn [x] (let [f (fn [y] (inc y))] (f x))) 3)
4 ;; good, 4 is the result I want here有更简单的方法来嵌套匿名函数吗?
发布于 2012-11-06 19:23:13
让我们打破第一条线:
((fn [x]
(fn [y] (inc y)) ; construct an anonymous function
x) ; return the outer parameter
3)请注意,从来没有使用内部函数。
你似乎想做的事:
((fn [x]
((fn [y] (inc y)) x))
3)发布于 2012-11-06 23:21:20
我强烈建议使用let表单来提高代码的清晰度。
(let [f (fn [y] (inc y))
g (fn [x] (f x))]
(g 3))我甚至还有另一个职能来接受前者。
(let [f (fn [y] (inc y))
g (fn [h x] (h x))]
(g f 3))甚至如下所示:
(let [f (fn [y] (inc y))
g (fn [h x] (h x))
gf (partial g f)]
(gf 3))它使阅读和理解功能更加容易。即使有了let,我也不会停在这里,去做另一个更好的函数。
经过一番思考,我认为当f这样做时,没有必要定义一个单arg函数inc。另外,使用读者的匿名函数文字可能会使人感到不知所措,而let表单变成:
(let [f inc
g #(% %2)
gf (partial g f)]
(gf 3))但我想得越多,我就越不了解这个问题。
你能描述一下你真正想要达到的目标吗?
https://stackoverflow.com/questions/13257735
复制相似问题