it seems kind of weird that map would work like that. i understood map as taking the first item of every collection and applying f to it. e.g (map + [2 4] [6 8]) -> [8 12]
In this case, since answer? takes a collection as argument I guess map just applies answer? to each collection? but don't all the collections have to be the same size or one will be exhausted? And then it seems that answer is acting independently on each collection. Is that because answer? only takes one argument, whereas a fcn like + takes 2 arguments. Sorry, I am a little bit confused. The other responses seemed very helpful too, but have not yet tried to figure them out. thx! On Mar 10, 12:18 pm, Wilson MacGyver <wmacgy...@gmail.com> wrote: > you can define a function to filter the result > > like > > (defn answer? [x] (filter #(every? integer? %) x)) > > and then just call it by doing > > user=> (map #(answer? %) (trips (range 1 7))) > (() () ([3 4 5]) () ()) > > > > On Wed, Mar 10, 2010 at 1:20 PM, Glen Rubin <rubing...@gmail.com> wrote: > > I am working on the following problem: > > > Find the only Pythagorean triplet, {a, b, c}, for which a + b + c = > > 1000 > > > My strategy is to produce a series of triplets of a^2 + b^2 and then > > filter out the ones where the c^2 is a perfect square, in order to > > determine Pythagorean triplets. > > > I wrote a function to produce triplets that takes a range as input: > > > (use '[clojure.contrib.math :only (sqrt)]) > > > (defn trips [coll] > > (loop [a (first coll) b (rest coll) trip []] > > (cond (seq b) > > (recur (first b) (rest b) (conj trip (map #(vector a % (sqrt (+ (* > > a a) (* % %)))) b))) > > true trip))) > > > ,so if I want to see all triplets over the range of 1-7, I just do: > > > (trips (range 1 7)), which yields the following; > > > [([1 2 2.23606797749979] [1 3 3.1622776601683795] [1 4 > > 4.123105625617661] [1 5 5.0990195135927845] [1 6 6.082762530298219]) > > ([2 3 3.605551275463989] [2 4 4.47213595499958] [2 5 > > 5.385164807134504] [2 6 6.324555320336759]) ([3 4 5] [3 5 > > 5.830951894845301] [3 6 6.708203932499369]) ([4 5 6.4031242374328485] > > [4 6 7.211102550927978]) ([5 6 7.810249675906654])] > > > Obviously the only Pythagorean triplet burried in there is 3, 4, 5. > > > Now, I can easily test a single vector for integers as follows: > > > (map integer? [5 6 7]) > > > However, the output of my trips function yields multiple collections > > of vectors inside of a larger vector. I am completely befuddled as to > > how to process this behemoth. > > > I guess I need to use some functions for merging collections? > > > Any help apprectiated. thanks!! > > > -- > > 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 > > -- > Omnem crede diem tibi diluxisse supremum. -- 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