[Collections] Clojure: contras (seq) vs. conj (lista)


Answers

Entiendo que lo que dices es verdad: conj en una lista es equivalente a los contras en una lista.

Puede pensar que conj es una operación de "insertar en alguna parte" y es una operación de "insertar en la cabeza". En una lista, es más lógico insertar en la cabecera, por lo que conj y contras son equivalentes en este caso.

Question

Sé que los cons devuelven un seq y conj devuelve una colección. También sé que conj "agrega" el artículo al final óptimo de la colección, y los cons siempre "agregan" el elemento al frente. Este ejemplo ilustra ambos puntos:

user=> (conj [1 2 3] 4) //returns a collection
[1 2 3 4]
user=> (cons 4 [1 2 3]) //returns a seq
(4 1 2 3)

Para vectores, mapas y conjuntos, estas diferencias tienen sentido para mí. Sin embargo, para las listas parecen idénticas.

user=> (conj (list 3 2 1) 4) //returns a list
(4 3 2 1)
user=> (cons 4 (list 3 2 1)) //returns a seq
(4 3 2 1)

¿Hay algún ejemplo de uso de listas en las que conj cons exhiben comportamientos diferentes o son realmente intercambiables? Expresado de manera diferente, ¿hay algún ejemplo en el que una lista y un seq no puedan usarse de manera equivalente?




Otra diferencia es el comportamiento de la lista?

(list? (conj () 1)) ;=> true
(list? (cons 1 ())) ; => false