我想重寫(我不知道如果原來的實現是懶惰的不是)一個懶惰實現的Clojure的使用lazy-seq
的作品像這樣交錯的:懶重新實現Clojure的交織
(take 4 (lazy-interleave ’(1 2 3) ’(a b c)))
(1 a 2 b)
我想出了這樣的事情,但我不知道爲什麼它不工作:
(defn lazy-interleave [v1 v2]
(lazy-seq (concat (list (first v1) (first v2))) (lazy-interleave (next v1) (next v2)))
)
編輯:
個多虧了亞瑟的答案,這裏是修改過的工作方案:
(defn lazy-interleave [v1 v2]
(lazy-seq
(cons (first v1) (cons (first v2) (lazy-interleave (rest v1) (rest v2))))
)
)
謝謝,我不知道有一個'懶貓'。只有一個問題:即使沒有用懶惰貓檢查,我們也可以從「lazy-interleave」中獲取有限數量的元素,但爲什麼我們不能用lazy-seq來做呢?在你的例子中,我會爲'(取2(lazy-interleave [1] []))'得到'(1 nil)',但即使使用'take'我的代碼也不起作用 – Yar
作爲一個喜歡貓的程序員,我試圖使用該功能,只要它可以適合 –
@ArthurUlfeldt哈哈完全明白了。再次感謝。 – Yar