Ниже приведен пример:Круговое определение в Clojure
(defn f1 [] (lazy-seq (cons 0 (f2))))
(defn f2 [] (lazy-seq (cons 1 (f3))))
(defn f3 [] (lazy-seq (cons 2 (f1))))
В Haskell эквивалент приведенного выше пример будет производить ленивую последовательность [0, 1, 2, 0, 1, 2, ... ], но в clojure это приведет к исключению CompilerException, потому что f2
не может быть разрешен.
Есть ли способ обойти это?
возможно дубликат [Must Clojure кольцевых структур данных включают конструкции, как реф? ] (http://stackoverflow.com/questions/11568036/must-clojure-circular-data-structures-involve-constructs-like-ref) – galdre