マップをネストした edn があります。この Clojure の非常に良い例を 1 つ見つけました。ネストされたハッシュマップで val を検索し、val が含まれるキーのシーケンスを返す関数です。
(def coll
{:a "aa"
:b {:d "dd"
:e {:f {:h "hh"
:i "ii"}
:g "hh"}}
:c "cc"})
この答えで
(defn find-in [coll x]
(some
(fn [[k v]]
(cond (= v x) [k]
(map? v) (if-let [r (find-in v x)]
(into [k] r))))
coll))
私の問題はsome
、最初の論理的真実に対してのみ、すべての結果のパスを取得できないためです。を試しmap
ましたkeep
が、再帰が壊れています。最初の結果だけでなく、すべての結果へのパスを返すようにこのコードを作成するにはどうすればよいですか? どんな助けでも大歓迎です。