后处理到Lazy-Sequences(Clojure)

Ant*_*ald 2 functional-programming clojure lazy-evaluation lazy-sequences clojurescript

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

(def numbers (iterate inc 0))
Run Code Online (Sandbox Code Playgroud)

我通过将其传递给函数take来限制无穷大.例如:

(take 3 numbers)
; > (0 1 2)
Run Code Online (Sandbox Code Playgroud)

我问自己如何为懒惰序列的成员添加一些后处理.更具体地说:当我使用take时,如何声明一个产生以下输出的函数"numbers-doubled":

(take 3 numbers-doubled)
; > ("00" "11" "22")
Run Code Online (Sandbox Code Playgroud)

rab*_*xis 6

您可以在iterate函数和函数之间使用map函数take.由于map是懒惰的,它只会消耗后面的take函数所要求的数量.

(take 3 (map #(str % %) numbers))
Run Code Online (Sandbox Code Playgroud)

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

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

(take 3 numbers-doubled)
Run Code Online (Sandbox Code Playgroud)