Fork me on GitHub
#specter
<
2018-02-05
>
phreed17:02:54

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?

nathanmarz18:02:19

@phreed you're looking to filter submaps that don't contain a key-value pair [:z :c1]?

phreed18:02:06

@nathanmarz yes, I think that is right.

nathanmarz18:02:20

the basic pattern for that is (setval <path> NONE data)

nathanmarz18:02:26

in this case (setval [MAP-VALS (not-selected? :z (pred= :c1))] NONE foo)

phreed18:02:50

yes, pruning the tree with setval does the trick.

phreed18:02:52

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)]) ?

nathanmarz18:02:14

@phreed yes, those are equivalent

nathanmarz18:02:38

similarly the path [:a :b :c] is the same as [[:a] [[:b]] :c]

nathanmarz18:02:38

a path is just a composition of navigators

nathanmarz19:02:01

a vector in a path is interpreted as a path