2012-09-28 27 views

Respuesta

4

lejos de ser perfecto, pero tal vez es un buen comienzo:

(clojure.walk/prewalk #(if (list? %) (remove vector? %) %) '(1 [2] 3 (4 [5] 6))) 
+0

Esto parece exactamente lo que estaba buscando. No se me ocurrió que podía realizar una función solo en las subestructuras. Gracias. – dansalmo

2

Me encantaría ver una solución más concisa utilizando clojure.walk, pero aquí es uno que utiliza una función recursiva y mapcat:

(defn remove-vectors [coll] 
    (mapcat 
    (fn [x] 
     (cond 
     (vector? x) nil 
     (coll? x) (list (remove-vectors x)) 
     :else (list x))) 
    coll)) 

y uno que utiliza filter y map:

(defn remove-vectors [coll] 
    (map #(if (coll? %) (remove-vectors %) %) (remove vector? coll))) 
Cuestiones relacionadas