【问题标题】:Post Processing to Lazy-Sequences (Clojure)对惰性序列进行后处理 (Clojure)
【发布时间】:2016-01-12 23:54:52
【问题描述】:

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

(def numbers (iterate inc 0))

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

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

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

(take 3 numbers-doubled)
; > ("00" "11" "22")

【问题讨论】:

  • (iterate inc 0) 只是(range)
  • 对!好吧..但为什么不呢
  • 唯一的情况是当您真正关心避免分块序列时,这通常是其他地方的问题。

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


【解决方案1】:

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

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

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

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

(take 3 numbers-doubled)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 2010-12-08
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多