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)
您可以在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)