2015-04-14 32 views
1

有沒有辦法在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]) 

回答

1

序列懶惰並不適用於Clojure中的延遲功能評價,你顯然需要構建無限嵌套的地圖。

使用try延遲:

user=> (def inf-map (fn rec [] {:a (delay (rec)) :b 42})) 
#'user/inf-map 
user=> (inf-map) 
{:a #<[email protected]: :pending>, :b 42} 
user=> @(:a (inf-map)) 
{:a #<[email protected]: :pending>, :b 42} 
+0

另見(http://stackoverflow.com/questions/3542236/clojure-deferred-function-execution) – Jens