Skip to content

Commit 0b06d12

Browse files
committed
Fix lazy-loop's support for destructured bindings
1 parent bcb0741 commit 0b06d12

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/flatland/useful/seq.clj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,11 @@
117117
need any laziness."
118118
[bindings & body]
119119
(let [f 'lazy-recur
120-
[names values] (alternates bindings)]
121-
`(letfn [(~f [~@names]
120+
[names values] (alternates bindings)
121+
blob-names (repeatedly (count names) gensym)]
122+
`(letfn [(~f [~@blob-names]
122123
(lazy-seq
123-
(iter# ~@names)))
124+
(iter# ~@blob-names)))
124125
(iter# [~@names]
125126
~@body)]
126127
(~f ~@values))))

test/flatland/useful/seq_test.clj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,14 @@
9898
(testing "0-arg lazy-loop"
9999
(is (= [1 1 1] (take 3
100100
(lazy-loop []
101-
(cons 1 (lazy-recur))))))))
101+
(cons 1 (lazy-recur)))))))
102+
(testing "destructuring support"
103+
(is (= (range 1 6)
104+
((fn my-map [f xs] (lazy-loop [[x & xs :as coll] xs]
105+
(when (seq coll)
106+
(cons (f x)
107+
(lazy-recur xs)))))
108+
inc (range 5))))))
102109

103110
(deftest test-alternates
104111
(is (= '[[a b] [1 2]]

0 commit comments

Comments
 (0)