【发布时间】:2015-01-28 06:17:41
【问题描述】:
给定一个带有键 :content 的映射,其中 content 是字符串列表或其他映射,我怎样才能展平值以仅接收字符串?
(flattener {:content '("b" {:content ("c" {:content ("d")})} "e")})
> '("b" "c" "d" "e")
我在非常糟糕的循环重复尝试中磕磕绊绊,现在我的大脑已经筋疲力尽了。在 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)))))
【问题讨论】: