On 28 October 2013 05:23, Jiaqi Liu <liujiaq...@gmail.com> wrote: >> 2013/10/28 Jiaqi Liu <liujiaq...@gmail.com> >>> >>> i really don't get it. >>> Any suggestion?? >> >> >> Clojure data structures are immutable. clojure.core/assoc >> produces a new data structure instead of changing the one you have. >> >> You can use an atom if you need to update a map from doseq >> but more likely you want to use the actual value assoc returns >> and/or clojure.core functions for manipulating collections, >> such as clojure.core/reduce. >> >> See http://clojure-doc.org/articles/language/core_overview.html, >> http://clojure-doc.org/articles/language/collections_and_sequences.html >> and >> http://clojure-doc.org/articles/language/concurrency_and_parallelism.html >> -- >> MK >> >> http://github.com/michaelklishin >> http://twitter.com/michaelklishin > > Thanks for your suggests~ > The above piece of code is just for test. > > The practical problem i want to solve is that > -->read a very big log file (each line is like that : "user id, latitude, > longitude, timeStamp") > -->statistic the number of each user (store in a map like that { id1 100 , > id2 200, id3 150 ....}) > -->sorted the map by values and get the top-N user id > > the main code of the former 2 steps is : > .... > (let [ id-num {} ] ;;as your suggestion , here should use atom > (with-open [rdr (the file...)] > (doseq [line (line-seq rdr)] > (let [params (split each line with "," ....) > id (params 0)] > (if (id-num id) > (do inc the value ....) > (do add new k-v ....))))) > ) > ... > I don't want to load the total file into memory, too big. > So referencing the suggestion from internet , i am using line-seq & doseq to > deal with the big log file lazily. > Is that right way to use clojue to deal this problem? > > Any suggestions will be grateful!!!
doseq isn't lazy and it doesn't return anything, it is meant to be used solely for side effects. for returns a lazy sequence. See http://clojuredocs.org/clojure_core. Alan -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.