Post 惰性序列处理 (Clojure)

Post Processing to Lazy-Sequences (Clojure)

假设我有一个称为数字的惰性序列,它给我一个无限的数字序列:0、1、2、3、4、5、6...

(def numbers (iterate inc 0))

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

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

我在问自己如何向惰性序列的成员添加一些 post 处理。更具体地说: 当我使用 take:

时,我将如何声明一个会产生以下输出的函数 "numbers-doubled"
(take 3 numbers-doubled)
; > ("00" "11" "22")

您可以在 iterate 函数和 take 函数之间使用映射函数。由于 map 是惰性的,它只会消耗后面 take 函数请求的数量。

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

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

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

(take 3 numbers-doubled)