说我有一个叫做数字的懒惰序列给了我一个无限的数字序列: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")
答案 0 :(得分:6)
您可以在iterate
功能和take
之间使用地图功能。由于map
是惰性的,因此它只会消耗后来take
函数所请求的数量。
(take 3 (map #(str % %) numbers))
您可以轻松地对该地图进行定义,使其成为自己的无限序列:
(def numbers-doubled
(map #(str % %) numbers))
(take 3 numbers-doubled)