在Clojure中,是否存在一些通用函数(类似于高阶函数map
、filter
、reduce
,其中从一个带有一个元素的向量开始,将函数f
应用于该元素,将该元素添加到向量,并将该函数应用于新元素,然后继续这样做,直到满足某些条件。
示例:我有向量[1]
,函数double
,以及我所追求的函数,称之为f
,类似于:
(take-while some-pred (f double 1))
产生:[1 2 4 8 16 32 . . .]
我想你说的是迭代:
(take-while #(< % 1000) (iterate #(* 2 %) 1))
;;=> (1 2 4 8 16 32 64 128 256 512)
如果你需要矢量,你也可以使用转换器:
(into [] (take-while #(< % 1000)) (iterate #(* 2 %) 1))
;; [1 2 4 8 16 32 64 128 256 512]