For Java.next [1,2] part 3, I am porting Daniel Spiewak's color  
example [3] to Clojure. Here's the Clojure version:

(defstruct color :red :green :blue)

(defn red [v] (struct color v 0 0))
(defn green [v] (struct color 0 v 0))
(defn blue [v] (struct color 0 0 v))

(defn keys-with-value-matching [map test-fn]
     (for [pair (map identity map) :when (test-fn (last pair))]
       (first pair)))

(defn basic-colors-in [color]
  (keys-with-value-matching color (comp not zero?)))

(defmulti color-string basic-colors-in)
(defmethod color-string [:red] [color] (str "Red: " (:red color)))
(defmethod color-string [:green] [color] (str "Green: " (:green color)))
(defmethod color-string [:blue] [color] (str "Blue: " (:blue color)))
(defmethod color-string :default [color]
  (str "Red: " (:red color) ", Green: " (:green color) ", Blue:  
" (:blue color)))

I am reasonably happy with the struct and the defmulti, but I am sure  
there is a more elegant way to do basic-colors-in and especially keys- 
with-value-matching. What is a more idiomatic approach?

Thanks,
Stuart

[1] http://blog.thinkrelevance.com/2008/8/4/java-next-common-ground
[2] http://blog.thinkrelevance.com/2008/8/12/java-next-2-java-interop
[3] http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4

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

Reply via email to