I think you're getting confused.

(map reduce + %) won't work, because the signature of the map function
is (map func & colls). In other words, the second argument is expected
to be a collection, but you've put in +, which is a function.

When dealing with nested collections, you may want to work from the
inside out. So take one of your inner lists:

  s1: (1 2 3 4)

  (reduce + s1)  =>  10
  (apply + s1)  =>  10

You can use reduce or apply to sum the lists. On the next level, we have:

  s2: ((1 2 3 4) (2 3 4 5) (3 4 5 6))

  (map (partial reduce +) s2)  =>  (10 14 18)

So we're using map to sum each list. (partial reduce +) is just
another way of writing #(reduce + %).

Next is the final layer:

  signal: (((1 2 3 4) (2 3 4 5) (3 4 5 6)) ((3 4 5 6) (4 5 6 7) (5 6 7 8)))

  (map (partial map (partial reduce +)) signal)
  => ((10 14 18) (18 22 26))

Again, we add a map, and use partial. We could perhaps make this a
little clearer by using for:

  (for [s signal]
    (for [c s] (reduce + c)))

- James


On 25 August 2010 15:06, Glen Rubin <rubing...@gmail.com> wrote:
> After toying around at the REPL I realize that I have been working
> with a heretofore invalid understanding of collections.  For example,
> working with the following collection(s):
>
> signal:
> (((1 2 3 4) (2 3 4 5) (3 4 5 6)) ((3 4 5 6) (4 5 6 7) (5 6 7 8)))
>
> I wanted to sum each individual list: e.g. (1 2 3 4) = (10)
>
> I thought I could do this as follows:
>
> (map #(map reduce + %) signal)
>
> This resulted in an error, so trying to comprehend why I ran the
> following:
>
> (map #(map identity (take 1 %)) signal)
>
> which results in,
> (((1 2 3 4)) ((3 4 5 6)))
>
> So, clojure sees 'signal' as 2 collections, whereas I thought it was a
> single collection.  This makes me concerned that I have been doing
> everything wrong thus far and getting computational errors. :(  So,
> how should I sum each individual list in the above collections?
>
> --
> 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

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