我有这个功能似乎在有限的集合上工作正常,但在无限集合上却没有。有没有办法在其中构建lazy-seq
以使其与无限的coll一起运行,例如:(take 3 (m inc (range)))
=> (1 2 3)
?
(defn m [f c] (reduce #(conj % (f %2)) [] c))
答案 0 :(得分:2)
这似乎是map
(map f c)
或(当它必须是向量时)
(mapv f c)
修改强> 可能会重新实现map:
(defn new-map [f coll]
(if (seq coll)
(lazy-seq
(cons (f (first coll))
(new-map f (rest coll))))))
答案 1 :(得分:1)
reduce
将继续从序列中获取元素,直到返回nil
为止。因此,reduce
永远不会返回无限序列。
正如评论中所指出的,reduced
可用于强制终止reduce
,谢谢!