Thanks Andy, Two comments: 1. Your version does not use a transient/mutable, which is great, but it does create one vector for each level. I thought that since this would be wrapped and hidden from external view, a mutable would have been more appropriate. More generally, I still don't know yet where to position myself when I code in Clojure, in terms of performance: I'm used to coding in C where I care a lot about every little detail, like cache coherency, or in Python for glue code where I really don't worry about such minute optimizations. Perhaps I tend to eagerly overoptimize in Clojure? Don't know. I like your version in any case, thank you.
2. More importantly: I don't understand why I'm often having to add some functionality which I think of as something that everyone would need everywhere, and that makes me think I'm thinking about it the wrong way. For example, when I'm being careful about not using any mutable objects anywehre I end up with code that essentially recreates a new path to the root application every time I need to modify/store something in memory (i.e., I get a new version of "the world" on every update). So I wonder... isn't anybody else in dire need for something like update-in+? How come not? Isn't it a really common case that you need to "modify" some object far from the root object of your application, and if so, that you may need to do multiple things with that new object, beyond "storing" it by recreating all the intervening objects? (e.g. (dosync (alter update-in ...))) ) (Generally I find I get too little "cultural osmosis" when it comes to practical application of Clojure, so questions like this one come up all the time while I'm coding. Meetups and books touch on topics I understand well but rarely do people talk about the kinds of issues I'm encountering, like the one above. Libraries and other people's code often doesn't help all that much because it's fairly easy to do away with mutability in a library context. I'll just read more OPC for now I guess.) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en