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 .