后处理到Lazy-Sequences(Clojure)

时间:2016-01-12 23:54:52

标签: clojure functional-programming lazy-evaluation clojurescript lazy-sequences

说我有一个叫做数字的懒惰序列给了我一个无限的数字序列:0,1,2,3,4,5,6 ...

(def numbers (iterate inc 0))

我通过将无穷大传递给函数take来限制无穷大。 e.g:

(take 3 numbers)
; > (0 1 2)

我问自己如何向懒惰序列的成员添加一些后处理。更具体地说: 我如何声明一个函数"数字加倍"当我使用take:

时会产生以下输出
(take 3 numbers-doubled)
; > ("00" "11" "22")

1 个答案:

答案 0 :(得分:6)

您可以在iterate功能和take之间使用地图功能。由于map是惰性的,因此它只会消耗后来take函数所请求的数量。

(take 3 (map #(str % %) numbers))

您可以轻松地对该地图进行定义,使其成为自己的无限序列:

(def numbers-doubled
  (map #(str % %) numbers))

(take 3 numbers-doubled)