Thanks for the elaborate answer! It also clears some other doubts I had regarding the core functions.
On Wednesday, August 29, 2012 11:34:56 PM UTC+2, miner wrote: > > flatten has been discussed before: > > https://groups.google.com/forum/?fromgroups=#!topic/clojure/ye70iNJ73zc > > See also CLJ-400, but it looks like no patch was submitted. > > http://dev.clojure.org/jira/browse/CLJ-400 > > I think the general policy for Clojure is that the core functions of > course should work as documented, but they do not necessarily handle > undocumented edge cases. So if you use the wrong kinds of arguments, the > implementation does not have to detect your error -- it might throw or just > give you non-useful results. There's a trade-off among ease of > implementation, performance and programmer friendliness. If it's a common > mistake, maybe an assertion is warranted. If I remember correctly, Rich > Hickey suggested that someday there might be an option to run a stricter > version of Clojure (with lots of assertions) during development, and a > faster version with less checking in production. > > Regarding flatten in particular, I would like it to be faster and to do a > bit more to help the careless programmer. I was all set to submit a patch > condemning the elegant but slow implementation when I noticed that the new > "reducers" version of flatten in 1.5 alphas is amazingly fast. So that > looks like the way to go. > > > > On Aug 29, 2012, at 3:47 PM, dmirylenka <daniilm...@gmail.com<javascript:>> > wrote: > > > Calling flatten on anything that is not 'sequential?' returns an empty > sequence: > > > > (flatten 1); => () > > (flatten "Hi"); => () > > > > With sets if feels somewhat strange: > > > > (flatten #{#{:a} #{:b :c}}); => () > > > > For some reason I expected #{#{:a} #{:b :c}} to equal #{:a :b :c}. > > > > Ok, the docstring says: "Takes any nested combination of sequential > things...", and sets are not sequential... > > > > But then, why > > > > (reduce + (flatten #{1 2})); => 0 > > (r/reduce + (r/flatten #{1 2})); => 3 ? > > -- 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