tutorial rich online hickey example clojure

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 .