clojure - Execute a vector of functions doesn't work when fns are passes as params -
this code doesn't work indended:
(((fn [& fns] (fn [& params] (reduce #(%2 %1) params fns))) rest reverse) [1 2 3 4]) ;; => () instead of (3 2 1)
is there way fix change inside #(%2 %1)
?
i think question equivalent to: how convert (#<core$rest>)
(rest)
?
note: process solve http://www.4clojure.com/problem/58 i've seen other solutions curious specific implementation.
try using [params]
rather [& params]
, so:
(fn [params] (reduce #(%2 %1) params fns))
the [& params]
argument taking collection [1 2 3 4]
, wrapping again, in list
, giving ([1 2 3 4])
seed reduce
function.
if wanted change inside #(%2 %1)
need unwrap ([1 2 3 4])
, first time. see if first
returned collection, (coll? (first %1))
, , call (first %1)
, otherwise leave %1
is. seems convoluted , won't work other input data though.
Comments
Post a Comment