【发布时间】:2013-01-04 01:01:27
【问题描述】:
我想知道如何在 Clojure 中创建一个无限的、不纯的唯一值序列。
(def generator ...) ; def, not defn
(take 4 generator) ; => (1 2 3 4)
(take 4 generator) ; => (5 6 7 8). note the generator's impurity.
我认为这样的设计可能比 e.g. 更方便。将单个整数值包装到引用类型中并从其消费者处递增,如下所示:
- 建议的方法将实现细节减少到一个单一的变化点:生成器。否则所有消费者都必须关心引用类型 (
atom) 和提供下一个值的具体函数 (inc) - 序列可以利用许多 clojure.core 函数。 “手动”从一个原子中构建一个 id 列表会有点笨重:
(take 4 (repeatedly #(swap! _ inc)))
我想不出一个可行的实现。 有可能吗?
【问题讨论】:
-
(repeatedly gensym)。不是你要找的,我知道。或者:(repeatedly #(gensym "")),生成看起来像数字的符号。 -
或实际数字:
(repeatedly #(Long. (str (gensym ""))))))
标签: clojure