(seq? [1 2])
vrací false
, zatímco (seq? '(1 2))
-> true
. Jak píšou na clojure.org:
"Clojure uses the ISeq interface to allow many data structures to provide access to their elements as sequences...."
... copak to pro vektory neplatí?Jo jeste dodam, ze funkce pro praci se sekvencemi 'magicky' pracuji i s vektory, napriklad first bude pracovat, protoze si sama zavola seq na svuj argument:
user=> (doc first) ------------------------- clojure.core/first ([coll]) Returns the first item in the collection. Calls seq on its argument. If coll is nil, returns nil.
ISeq
je abstrakce kolekce, u které se očekává jen sekvenční průchod a ne efektivní přístup podle indexu, ani zjištění počtu prvků apod. Je to to co dostanu, když na něco zavolám seq
, nebo když mám lazy sekvenci.
V běžném kódu se seq?
(ani sequential?
apod.) myslím moc neužije :-)