2012-09-28 15 views

cevap

4
mükemmel olmaktan uzak

ama belki de iyi bir başlangıç: Burada

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

Bu benim aradığım tam olarak ne gibi görünüyor. Bana sadece alt yapılar üzerinde bir işlev yapabileceğimi göstermedi. Teşekkürler. – dansalmo

2

Ben clojure.walk kullanarak daha özlü çözüm görmek isterdim, ama bir özyinelemeli fonksiyon ve mapcat kullanan biri:

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

ve kullanan bir filter ve map:

(defn remove-vectors [coll] 
    (map #(if (coll? %) (remove-vectors %) %) (remove vector? coll))) 
İlgili konular