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.


Reply via email to