Eine Liste von Vektoren erstellen, die die Elemente in Kombination mit den Indizes enthalten,
(def with-indexes (map #(vector %1 %2 ) ['a 'b 'c 'd 'e 'f] (range)))
#'clojure.core/with-indexes
with-indexes
([a 0] [b 1] [c 2] [d 3] [e 4] [f 5])
diese Liste filtern
lojure.core=> (def filtered (filter #(#{1 3 5 7} (second % )) with-indexes))
#'clojure.core/filtered
clojure.core=> filtered
([b 1] [d 3] [f 5])
entfernen Sie dann die Indizes.
clojure.core=> (map first filtered)
(b d f)
dann fädeln wir sie mit dem Makro "thread last" zusammen
(defn filter-by-index [coll idxs]
(->> coll
(map #(vector %1 %2)(range))
(filter #(idxs (first %)))
(map second)))
clojure.core=> (filter-by-index ['a 'b 'c 'd 'e 'f 'g] #{2 3 1 6})
(b c d g)
Die Moral von der Geschicht' ist, sie in kleine unabhängige Teile zu zerlegen, sie zu testen und sie dann zu einer funktionierenden Funktion zusammenzusetzen.