user=> (doc repeatedly)
-------------------------
clojure.core/repeatedly
([f] [n f])
Takes a function of no args, presumably with side effects, and
returns an infinite (or length n if supplied) lazy sequence of calls
to it
nil
user=> (repeatedly 5 (fn [] 90))
(90 90 90 90 90)
user=> (type (repeatedly 5 (fn [] 90)))
clojure.lang.LazySeq
user=> (repeatedly 5 (fn [] (do (println "hi") 75)))
(hi
hi
75 hi
75 hi
75 hi
75 75)
user=> (repeatedly (fn [] 87))
OutOfMemoryError Java heap space java.util.Arrays.copyOf (:-1)
So you can see repeatedly can take a function with/without side effect. But how to return a function with infinite length?