基本Clojure:如何展平嵌套列表?

acr*_*ron 2 clojure

请看下面的代码:

(def data {:color ["R", "B", "G"] :name "Hello" :up "down"})

(defn collapse-vector-kvp [k v] 
   (map #(hash-map k %) v))

(defn collapse-map [m]
   (map #(let 
      [x %] 
      (if (vector? (val x)) 
            (collapse-vector-kvp (key x) (val x))
            (hash-map (key x) (val x))
        )) m))

(collapse-map data)

=> ({:name "Hello"} ({:color "R"} {:color "B"} {:color "G"}) {:up "down"})
Run Code Online (Sandbox Code Playgroud)

我想要做的是创建一个列表,而不是将"颜色"条目放在列表中的列表中.这容易实现吗?

Mic*_*ent 6

user=> (def data2 '({:name "Hello"} ({:color "R"} {:color "B"} {:color "G"}) {:up "down"}))
#'user/data2
user=> (flatten data2)
({:name "Hello"} {:color "R"} {:color "B"} {:color "G"} {:up "down"})
Run Code Online (Sandbox Code Playgroud)