Very nice! I would change the :satisfies clause for underachievers so  
that it does not create an ordering dependency.

You should post this over on Uncle Bob's site.

Stu

>
> Hi Stu,
>
>
> Stuart Halloway <stuart.hallo...@gmail.com> writes:
>
>> Uncle Bob Martin, a very well-respected OO and agile guy, is learning
>> Clojure. He has posted an example [1] and asked for feedback from the
>> Clojure community. I have made my suggestions in code [2] and will be
>> writing them up shortly.
>>
>> Would love to see what other folks on this list have to say.
>
> My first version came out rather similar to yours, and then I started
> thinking about turning the problem on its head and making the  
> concept of
> "types of rolls" more explicit.  I'm still not sure how I feel about
> this, but the line of thinking led me to code like this:
>
>  (ns bowling-game
>    (:use clojure.contrib.seq-utils))
>
>
>  (def *roll-types*
>       [{:name "strike"
>         :satisfies #(= (first %) 10)
>         :consumes 3
>         :advances 1}
>
>        {:name "spare"
>         :satisfies #(= (apply + (take 2 %))
>                        10)
>         :consumes 3
>         :advances 2}
>
>        {:name "regular (underachieving?)"
>         :satisfies (constantly true)
>         :consumes 2
>         :advances 2}])
>
>
>  (defn roll-type [rolls]
>    (find-first #((:satisfies %) rolls)
>                *roll-types*))
>
>
>  (defn frames [rolls]
>    (when (seq rolls)
>      (let [{:keys [consumes advances]} (roll-type rolls)]
>        (cons (take consumes rolls)
>              (frames (drop advances rolls))))))
>
>
>  (defn score-game [rolls]
>    (reduce + (map #(reduce + %)
>                   (take 10 (group-frames rolls)))))
>
>
> Cheers,
>
> Mark
>
> -- 
> Mark Triggs
> <mark.h.tri...@gmail.com>
>
> >


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to