Which macro provides the ability to select nodes from a tree whose subpath matches a pattern? e.g. Given (def foo {"a1" {:z :c1, :d "e1"} "a2" {:z :c2, :d "e2"}}) (select [ALL (magic [VAL :z :c1])] foo) > {"a1" {:z :c1, :d "e1"} } What is the magic macro? Should I be using transform instead of select?
@phreed you're looking to filter submaps that don't contain a key-value pair [:z :c1]
?
@nathanmarz yes, I think that is right.
the basic pattern for that is (setval <path> NONE data)
in this case (setval [MAP-VALS (not-selected? :z (pred= :c1))] NONE foo)
yes, pruning the tree with setval does the trick.
I am looking at the documentation for not-selected?
it appears to take only one argument, a path. What is going on here (not-selected? :z (pred= :c1))
that looks like two arguments. Is it equivalent to (not-selected? [:z (pred= :c1)])
?
@phreed yes, those are equivalent
similarly the path [:a :b :c]
is the same as [[:a] [[:b]] :c]
a path is just a composition of navigators
a vector in a path is interpreted as a path