aysylu / loom

Graph library for Clojure. Mailing list https://groups.google.com/forum/#!forum/loom-clj
http://aysy.lu/loom/
886 stars 108 forks source link

non-pure map functions in `mapped-by` shouldn't create multiple nodes. #100

Open brycecovert opened 7 years ago

brycecovert commented 7 years ago

I had a case where I was mapping over a graph and assoc'ing a uuid onto each. This caused my directed graph to have lots of 'copies' in it, since each call to the mapping function resulted in a different value. The result is a graph with a 2 new nodes per edge.

At first, I thought that changing mapped-by might be wrong, since it's generally poor form to use state in map/filter/etc. However, I realized that none of the derived graph functions are lazy, they're all eager, so this probably fits in line with the existing design.

An alternative for me would be the ability to edit/update a node, with semantics similar to update-in or swap!. An example of that would be: (update-node graph node #(assoc % :id (rand-int))).