En Clojure, la función set
convierte automáticamente un vector
o list
en un set
. Pero este no es el caso para sorted-set
:¿Cómo convertir una lista o un vector en un conjunto ordenado en Clojure?
(set [3 2 1]) ; #{1 2 3}
(set '(3 2 1)) ; #{1 2 3}
(sorted-set [3 2 1]) ; #{[3 2 1]}
(sorted-set '(3 2 1)) ; #{(3 2 1)}
Aquí es una solución me ocurren:
(defn sorted-set-from-coll [coll]
(eval (cons sorted-set (seq coll))))
(def v [3 2 1])
(sorted-set-from-coll v) ; #{1 2 3}
(sorted-set-from-coll '(3 2 1)) ; #{1 2 3}
(sorted-set-from-coll [3 1 2]) ; #{1 2 3}
¿Existe una manera mejor/más idiomática de hacer esto sin eval?
'into' es más idiomático ya que transmite lo que está sucediendo (una estructura de datos en otra), y se puede utilizar con una estructura de datos de destino existente. –