Question about updating a list of lists: If I have the following structure:
[[?x :a/b ?y]
[?y :b/c ?z]
;; I WANT TO NAVIGATE HERE FOR INSERTION
[?z :d/e ?a]]
where I want to insert:
[[?z :x/y "FOO"]
[?z :x/k "BAR"]]
resulting in:
[[?x :a/b ?y]
[?y :b/c ?z]
[?z :x/y "FOO"]
[?z :x/k "BAR"]
[?z :d/e ?a]]
What is the path, and does that require transform? or replace-in?
I’m trying to use
[S/ALL
(S/pred= '[?y :b/c ?z])
S/AFTER-ELEM]
for my path with a transform But that’s not working.
I can’t assure the index of the insertion point will always be the same@okocim here’s a kludgy two-step solution:
user=> a
[[?x :a/b ?y] [?y :b/c ?z] [?z :d/e ?a]]
user=> b
[[?z :x/y "FOO"] [?z :x/k "BAR"]]
user=> (def i (select-one [INDEXED-VALS (selected? LAST (pred= '[?y :b/c ?z])) FIRST] a))
#'user/i
user=> (setval [(srange i (inc i)) END] b a)
[[?x :a/b ?y]
[?y :b/c ?z]
[?z :x/y "FOO"]
[?z :x/k "BAR"]
[?z :d/e ?a]]
Thanks, I’ll take it for now. It is a bit fumbly, but I think I can cordon that off until I can come up with something better
If you find something cleaner post it here!
I will. I was headed down the path of doing the two steps (find the index and splice-in) when you posted this, so thank you. I will be happy to return the favor if I can.