lps540 <lps...@gmail.com> writes:

> I've written a small example of Conway's Game of Life using Clojure
> and Swing. Comments/critiques are welcome.

Interesting program!

    (for [x (range 32) y (range 48)]
                (ref-set cells 
                  (assoc (deref cells) [x y] (= 0 (rand-int 5)))))

While you can use ref-set this way, it's much more concise to use alter:

    (for [x (range 32) y (range 48)]
      (alter cells assoc [x y] (= 0 (rand-int 5))))

You should use this in calc-state as well.

Also, the paint-cells function is called only for side-effects. Instead
of using dorun+map, you should use doseq:

  (defn paint-cells [graphics]
    (doseq [cell @cells]
      (let [x (first (first cell))
            y (second (first cell))
            state (second cell)]
        (doto graphics
          (. setColor (if state Color/RED Color/WHITE))
          (. fillRect (* 10 x) (* 10 y) 10 10)))))

I'm not sure if making "running" a ref makes sense here. Do you need to
coordinate change in it across threads, or will the change only happen
in one thread? If it's the former, using a thread-local var with
"binding" is probably a better choice.

Also, instead of calling (deref cells), you can use @cells for short.

-Phil

--~--~---------~--~----~------------~-------~--~----~
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 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to