【发布时间】:2014-01-27 02:01:42
【问题描述】:
4Clojure Problem 58 表示为:
编写一个允许您创建函数组合的函数。参数列表应采用可变数量的函数,并创建一个从右到左应用它们的函数。
(= [3 2 1] ((__ rest reverse) [1 2 3 4]))
(= 5 ((__ (partial + 3) second) [1 2 3 4]))
(= true ((__ zero? #(mod % 8) +) 3 5 7 9))
(= "HELLO" ((__ #(.toUpperCase %) #(apply str %) take) 5 "hello world"))
这里__应该换成解决方案。
在这个问题中,不应使用函数comp。
我找到的解决办法是:
(fn [& xs]
(fn [& ys]
(reduce #(%2 %1)
(apply (last xs) ys) (rest (reverse xs)))))
它有效。但我真的不明白reduce 在这里是如何工作的。怎么代表(apply f_1 (apply f_2 ...(apply f_n-1 (apply f_n args))...)?
【问题讨论】:
标签: clojure