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}
有没有办法在 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}