如果给你一个包含键名为“content”的地图,其中content是字符串或其他地图的列表,我该如何将这些值展开并仅获取字符串?
(flattener {:content '("b" {:content ("c" {:content ("d")})} "e")})
> '("b" "c" "d" "e")
我正在尝试使用非常hacky的loop recur方法,现在我的大脑已经崩溃了。在Clojure中有没有一种优雅的惯用方式来做到这一点?
谢谢。
以下是我目前的代码,虽然它可以工作,但看起来很丑陋
(defn flatten-content
[coll]
(loop [acc '(), l coll]
(let [fst (first l), rst (rest l)]
(cond
(empty? l) (reverse acc)
(seq? fst) (recur acc (concat fst rst))
(associative? fst) (recur acc (concat (:content fst) rst))
:else (recur (conj acc fst) rst)))))