Clojure 中的惰性自递归数据结构

Lazy self-recursive data structures in Clojure

有没有办法在 Clojure 中描述任意惰性自递归数据结构? 比方说我想做这样的事情:

(def inf-seq (fn rec [] (lazy-seq (cons 42 (rec)))))
(take 3 (inf-seq))

但有地图:

(def inf-map (fn rec [] (??? {:a (rec) :b 42})))
(get-in (inf-map) [:a :a :a :b])

序列惰性不适用于 Clojure 中的延迟函数求值,而构建无限嵌套映射显然需要它。

尝试使用延迟:

user=> (def inf-map (fn rec [] {:a (delay (rec)) :b 42}))
#'user/inf-map
user=> (inf-map)
{:a #<Delay@4e9f9a19: :pending>, :b 42}
user=> @(:a (inf-map))
{:a #<Delay@5afd479c: :pending>, :b 42}