Hi Andy, I'd missed the more recent versions with tool-tips, thank you for pointing me to them.
Regards, James On Thursday, July 11, 2013 5:11:21 PM UTC+2, Andy Fingerhut wrote: > > There is a link "Download other versions with tooltips" near the top of > the Clojure Cheat Sheet page (http://clojure.org/cheatsheet) that links > to versions that are a bit more recent, and they include tooltips of the > doc strings when you hover your cursor over the symbol. > > The version at clojure.org/cheatsheet gets updated less frequently, > simply because I have to ask someone else to do it who has the necessary > permissions. I'll ask again now. > > Andy > > > On Thu, Jul 11, 2013 at 6:50 AM, James Trunk <james...@gmail.com<javascript:> > > wrote: > >> Hello Laurent, >> >> Thank you so much for your detailed and helpful reply. >> >> > You could use the new as-> macro in clojure 1.5 >> Is it possible to get as-> to work with thread-last? >> >> > depends :-) since your 2 fns are helper fns rather than >> > generically-reusable fns, I would make them private to enforce that : >> > (defn- ...) >> Good point, and I'll definitely try to remember that in the future. >> >> > May I suggest alternative implementations ? >> > <snip> >> I really like both of your alternative solutions, and have learned >> several new ideas from them. Thank you. >> >> By the way, I'm using the Clojure Cheat Sheet ( >> http://clojure.org/cheatsheet) as my guide to the core functions, but it >> doesn't seem to be up-to-date with all these fancy 1.5 functions that >> you're using. Is there a new website that has superseded CCS? Do you know >> why CCS isn't kept up-to-date? >> >> Regards, >> James >> >> On Thursday, July 11, 2013 2:29:38 PM UTC+2, Laurent PETIT wrote: >> >>> Hello James, >>> >>> 2013/7/11 James Trunk <james...@gmail.com>: >>> > Hi everyone, I'm new to Clojure and trying to learn my way around the >>> > language. >>> > >>> > I've written a function that sums the frequencies of words starting >>> with the >>> > same letter, however I'm not fully satisfied with the result. I'm >>> striving >>> > for readability and idomaticity, but I fear that my rather limited >>> grasp of >>> > Clojure's core functions and lack of experience with functional >>> programming >>> > are letting me down on both counts. >>> > >>> > (def text (slurp >>> > "http://www.ccel.org/ccel/**bible/kjv.txt<http://www.ccel.org/ccel/bible/kjv.txt>")) >>> > >>> >>> > >>> > (defn sum-last-elements [coll] >>> > (reduce + (map last coll))) >>> > >>> > (defn group-first-elements [coll] >>> > (map first coll)) >>> > >>> > (->> text >>> > (re-seq >>> > #"(?:(?:\bm[a|e]n\b)|(?:\bwom[**a|e]n\b)|(?:\bchild\b)|(?:\**bchildren\b))") >>> > >>> >>> > frequencies >>> > (group-by ffirst) >>> > vals >>> > (#(zipmap (map group-first-elements %) (map sum-last-elements >>> %)))) >>> > >>> > Which on that file gives the result: >>> > >>> > {("woman" "women") 663, ("children" "child") 2274, ("men" "man") 5314} >>> > >>> > My questions: >>> > >>> > Is there a way to avoid using ?: everywhere in the regex? >>> > (group-by ffirst) vals - is there a more >>> readable/declarative/idiomatic way >>> > to group by first letter? >>> >>> you could first (group-by first), then create the final map by calling >>> (distinct) and count >>> >>> > Is there a trick to avoid the ugly looking anonymous function (which >>> I'm >>> > only using to reorder the thread-last argument)? >>> >>> You could use the new as-> macro in clojure 1.5 >>> >>> > Is it idiomatic to extract small functions to give them names (with an >>> eye >>> > to aiding readability) or would most Clojure programmers prefer these >>> to be >>> > anonymous and in-line? >>> >>> depends :-) since your 2 fns are helper fns rather than >>> generically-reusable fns, I would make them private to enforce that : >>> (defn- ...) >>> >>> > Is thread-last the right approach when dealing with nested >>> data-structures >>> > or is list comprehension, or some other approach preferred? >>> >>> The thread-last as you employed it is fine by me. >>> >>> May I suggest alternative implementations ? >>> >>> (def text (slurp >>> "http://www.ccel.org/ccel/**bible/kjv.txt<http://www.ccel.org/ccel/bible/kjv.txt>")) >>> >>> >>> (let [words (re-seq >>> #"(?:(?:\bm[a|e]n\b)|(?:\bwom[**a|e]n\b)|(?:\bchild\b)|(?:\**bchildren\b))" >>> >>> text) >>> words-per-initial (vals (group-by first words))] >>> (zipmap >>> (map distinct words-per-initial) >>> (map count words-per-initial))) >>> >>> ;; => {("woman" "women") 663, ("children" "child") 2274, ("men" "man") >>> 5314} >>> >>> >>> >>> or to avoid the intermediary creation of seqs of distincts and seqs of >>> counts: >>> >>> (defn- reduce-initial [m initial initial-words] >>> (assoc m (distinct initial-words) (count initial-words))) >>> >>> (let [words (re-seq >>> #"(?:(?:\bm[a|e]n\b)|(?:\bwom[**a|e]n\b)|(?:\bchild\b)|(?:\**bchildren\b))" >>> >>> text) >>> words-per-initial (group-by first words)] >>> (reduce-kv reduce-initial {} words-per-initial)) >>> >>> ;; => {("woman" "women") 663, ("children" "child") 2274, ("men" "man") >>> 5314} >>> >>> >>> HTH, >>> >>> -- >>> Laurent >>> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- -- 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.