2010/8/10 Alan <[email protected]>:
> I have the following function as part of a card-game system I'm
> developing:
>
> (defn make-suit
> [suit owner ranks]
> {suit (map (partial struct-map card
> :suit suit
> :owner owner
> :rank)
> ranks)})
>
> (make-suit :spade :west [9 5]) yields
>
> {:spade
> ({:suit :spade, :owner :west, :rank 9}
> {:suit :spade, :owner :west, :rank 5})}
>
> which is exactly what I want. But I have failed countless times to
> define a make-hand function - I'd like to be able to call (make-
> hand :west {:spade [9 5], :club [10]}) and get back
>
> {:spade
> ({:suit :spade, :owner :west, :rank 9}
> {:suit :spade, :owner :west, :rank 5}),
> :club
> ({:suit :club, :owner :west, :rank 10})}
>
> Can someone put me on the right track? I'm sure the solution for this
> is trivially simple but I can't quite find it.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>
My attempt:
(defn make-hand [owner cards]
(into {} (for [[suit ranks] cards]
[suit (for [rank ranks]
{:suit suit
:owner owner
:rank rank})])))
Notice that a sequence of a map is a sequence of its [key value]
pairs. The keys are in this case the suits and the values which ranks
of that suits that should be included. To generate a map, it is often
useful to make [key value] pars and conj them into an empty map using
'into'. The generated map has the suits as its key, and for each suit
the ranks are looped over. A card map, including suit, rank and owner
is generated for each rank. The "current" suit and owner is accessed
through the for body's closure.
// raek
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en