realized?

added
1.3

ns
clojure.core

type
function

(realized? x)

Returns true if a value has been produced for a promise, delay, future or lazy sequence.

                ;; Create a promise
user> (def p (promise))
#'user/p ; p is our promise

;; Check if was delivered/realized
user> (realized? p)
false ; No yet

;; Delivering the promise
user> (deliver p 42)
#<core$promise$reify__5727@47122d: 42>

;; Check again if it was delivered
user> (realized? p)
true ; Yes!

;; Deref to see what has been delivered
user> @p
42

;; Note that @ is shorthand for deref
user> (deref p)
42
            
                ;; For lazy sequences

user=> (def r (range 5))
#'user/r
user=> (realized? r)
false
user=> (first r)
0
user=> (realized? r)
true

; As of Clojure 1.7.0 range returns a LongRange, not a LazySeq
; see https://groups.google.com/forum/#!topic/clojure/NFwHkZxUFuY

user=> (def r (lazy-seq (range 5)))
#'user/r
user=> (realized? r)
false
user=> (first r)
0
user=> (realized? r)
true