rich - clojurescript
¿Cuál es la diferencia entre las funciones seq ?, secuenciales? y col? (2)
¿Cuál es la diferencia entre las funciones seq? ¿secuencial? y col?
Encontré información dispersa en Internet, pero creo que sería mejor centralizar esa información aquí.
seq?
es un predicado que devuelve verdadero si su argumento implementa la interfaz ISeq
, es decir, proporciona los métodos first
, rest
, cons
. Ver http://clojure.org/sequences .
(seq? [1 2])
false
(seq? (seq [1 2]))
true
sequential?
es un predicado que devuelve verdadero si su argumento implementa la interfaz Sequential
. Sequential
es una interfaz de marcador (sin métodos) y es una promesa de que la colección se puede iterar en un orden definido (por ejemplo, una lista, pero no un mapa).
(sequential? [])
true
(sequential? {})
false
coll?
es un predicado que devuelve verdadero si su argumento implementa IPersistentCollection
. Así, por ejemplo, las estructuras de datos de clojure se devolverían verdaderas, mientras que las estructuras de datos de java nativas no:
(coll? {:a 1})
true
(coll? (java.util.HashMap.))
false
-
seq?
es cierto para cualquier secuencia. -
sequential?
es cierto para cualquier colección secuencial (no asociativa). -
coll?
Es cierto para cualquier colección de Clojure.
seq?
implica sequential?
implica coll?
=> ((juxt seq? sequential? coll?) ()) ; [true true true]
=> ((juxt seq? sequential? coll?) []) ; [false true true]
=> ((juxt seq? sequential? coll?) #{}); [false false true]
Inexacto: sequential?
Está relacionado con los demás únicamente por convención: vea la respuesta de Kevin .