Skip to content

Commit 6bc098d

Browse files
committed
Implement iterate
1 parent ea2fd75 commit 6bc098d

File tree

2 files changed

+22
-1
lines changed
  • language-adaptors/rxjava-clojure/src

2 files changed

+22
-1
lines changed

language-adaptors/rxjava-clojure/src/main/clojure/rx/lang/clojure/core.clj

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
empty every?
55
filter first future
66
group-by
7-
interleave interpose into
7+
interleave interpose into iterate
88
keep keep-indexed
99
map mapcat map-indexed
1010
merge next nth partition-all reduce reductions
@@ -550,6 +550,19 @@
550550
; same thread, so we can't do that here.
551551
(reduce conj to from))
552552

553+
(defn iterate
554+
"Returns an Observable of x, (f x), (f (f x)) etc. f must be free of side-effects
555+
556+
See:
557+
clojure.core/iterate
558+
"
559+
[f x]
560+
(observable* (fn [s]
561+
(loop [x x]
562+
(when-not (unsubscribed? s)
563+
(on-next s x)
564+
(recur (f x)))))))
565+
553566
(defn keep
554567
[f xs]
555568
(filter (complement nil?) (map f xs)))

language-adaptors/rxjava-clojure/src/test/clojure/rx/lang/clojure/core_test.clj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,14 @@
348348
{} []
349349
'() (range 50)))
350350

351+
(deftest test-iterate
352+
(are [f x n] (= (->> (iterate f x) (take n))
353+
(->> (rx/iterate f x) (rx/take n) (b/into [])))
354+
inc 0 10
355+
dec 20 100
356+
#(conj % (count %)) [] 5
357+
#(cons (count %) % ) nil 5))
358+
351359
(deftest test-keep
352360
(is (= (into [] (keep identity [true true false]))
353361
(b/into [] (rx/keep identity (rx/seq->o [true true false])))))

0 commit comments

Comments
 (0)