I'm trying to use Stuart Sierra's implementation of cells.  I want to
sum the values of a large number of cells.  Rather than linearly
summing all the values, I would like to create a tree of cells whose
root contains the sum.  I added the function commute-cells:

(defn commute-cells [f cells]
  (let [len1 (count cells)
        len2 (/ len1 2)]
    (cond (= 1 len1)
          (first cells)
          (= 2 len1)
          (cell (f (cv (first cells))
                   (cv (second cells))))
          true
          (cell (f (cv (commute-cells f (take len2 cells)))
                   (cv (commute-cells f (drop len2 cells))))))))

This seems to work for small numbers of cells, but never finishes for
larger values.

user> (reduce + (range 10))
45
user> (def cells (map #(cell %) (range 10)))
#'user/cells
user> (def sum (commute-cells + cells))
45
user> (reduce + (range 1000))
499500
user> (def cells (map #(cell %) (range 1000)))
#'user/cells
user> (def sum (commute-cells + cells))
; Evaluation aborted.

Do I need to make this a macro?  If so, could someone help me out, and
make a macro for the linear version as well?
--~--~---------~--~----~------------~-------~--~----~
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