ClojureDocs

Nav

Namespaces

sequential?

clojure.core

Available since 1.0 (source)
  • (sequential? coll)
Returns true if coll implements Sequential
2 Examples
;; You may also find this useful: https://insideclojure.org/2015/01/02/sequences

user=> (sequential? '(1 2 3))
true

user=> (sequential? [1 2 3])
true

user=> (sequential? (range 1 5))
true

user=> (sequential? '())
true

user=> (sequential? [])
true

user=> (sequential? nil)
false

user=> (sequential? 1)
false

user=> (sequential? "abc")
false

user=> (sequential? {:a 2 :b 1})
false

user=> (sequential? #{1 2 3})
false
;; Be careful while traversing data:
;; map entries are vectors and thus sequential!

user=> (sequential? (first {:a 1}))
true

user=> (sequential? (clojure.lang.MapEntry. :a 1))
true

user=> (vector? (first {:a 1}))
true

user=> (vector? (clojure.lang.MapEntry. :a 1))
true

user=> (clojure.walk/postwalk
         #(cond-> % (sequential? %) set)
         {:a [1 1 2 3]})
; Unhandled java.lang.ClassCastException
;  class clojure.lang.PersistentHashSet cannot be cast to class
;  java.util.Map$Entry (clojure.lang.PersistentHashSet is in unnamed module of
;  loader 'app'; java.util.Map$Entry is in module java.base of loader
;  'bootstrap')

user=> (clojure.walk/postwalk
         #(cond-> %
            (and (sequential? %)
                 (not (map-entry? %)))
            set)
         {:a [1 1 2 3]})
{:a #{1 3 2}}
See Also

Return true if x implements ISeq

Added by 0x89

Returns true if x implements IPersistentCollection

Added by 0x89

Return true if the seq function is supported for x

Added by glts
1 Note
    By , created 4.5 years ago, updated 4.5 years ago

    Of the four key collection types, vectors and lists are ordered (aka sequential). Sets and maps are not.