Thanks Jon and Jen, This is a great!  I figured there must be a 
straightforward way to do this with a `for/hash` implementation.  I have 
not seen these 2 methods `in-hash` and `in-list` vs just using the hash or 
list without that sequence modifier.  Can you comment on what is going on 
with this `in-xxx` sequence modification?  The docs indicate that you get 
slightly better performance when using these with `for`, but its not clear 
why and in what situations you must use these modifiers rather than the 
underlying list or hash itself--is it always optional?

On Wednesday, February 20, 2019 at 5:28:06 PM UTC-5, Jon Zeppieri wrote:
>
>
>
> On Wed, Feb 20, 2019 at 5:08 PM Jon Zeppieri <zepp...@gmail.com 
> <javascript:>> wrote:
>
>>
>> (define (reverse-hash h)
>>   (for*/fold ([result (hash)])
>>              ([(score letters) (in-hash h)]
>>               [letter (in-list letters)])
>>     (hash-set result letter score)))
>>
>>
> As with Jens's answer, we can use `for*/hash` here, as well, and make this 
> slightly shorter:
>
> (define (reverse-hash h)
>   (for*/hash ([(score letters) (in-hash h)]
>               [letter (in-list letters)])
>     (values letter score)))
>
> `for*/hash` is really a specialized version of `for*/fold`, which handles 
> the hash accumulator for you. The `(values letter score)` expression in the 
> body indicates how the (implicit) accumulator will be updated.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to