Я хотел бы знать, как создать бесконечную, нечистую последовательность уникальных значений в Clojure.
(def generator ...) ; def, not defn
(take 4 generator) ; => (1 2 3 4)
(take 4 generator) ; => (5 6 7 8). note the generator impurity.
Я думаю, что такой дизайн может быть более удобным, чем, например, обертывание единственного целочисленного значения в ссылочный тип и увеличение его от его потребителей, например:
- Предлагаемый подход уменьшает детали реализации до одной точки изменения: генератора. В противном случае все потребители должны были заботиться как о ссылочном типе (
atom
), так и о конкретной функции, которая предоставляет следующее значение (inc
) - Последовательности могут воспользоваться многими функциями Clojure.core. "Вручную" создание списка идентификаторов из атома будет немного громоздким:
(take 4 (repeatedly #(swap! _ inc)))
Я не мог придумать рабочую реализацию. Возможно ли вообще?