lazy list comprehension

2014-06-27 Thread Glen Rubin
I have a list that I want to combine in some way with an incremented list, 
so I was trying to write a for expression like this:

(for [i '(my-list-of-crap), j (iterate inc 0)] (str i j))


The problem with this is that it yields an out of memory area.  I assume 
this is b/c of my poor use of the iterate fn.  How can I do this in a lazy 
way?  So that iterate only produces as many items as is needed to match the 
number of items I have in '(my-list-of-crap).  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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: lazy list comprehension

2014-06-27 Thread Moritz Ulrich
Use map. for produces permutations.
Am 27.06.2014 17:02 schrieb Glen Rubin rubing...@gmail.com:

 I have a list that I want to combine in some way with an incremented list,
 so I was trying to write a for expression like this:

 (for [i '(my-list-of-crap), j (iterate inc 0)] (str i j))


 The problem with this is that it yields an out of memory area.  I assume
 this is b/c of my poor use of the iterate fn.  How can I do this in a lazy
 way?  So that iterate only produces as many items as is needed to match the
 number of items I have in '(my-list-of-crap).  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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.


-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: lazy list comprehension

2014-06-27 Thread François Rey

On 27/06/14 17:01, Glen Rubin wrote:
I have a list that I want to combine in some way with an incremented 
list, so I was trying to write a for expression like this:


(for [i '(my-list-of-crap), j (iterate inc 0)] (str i j))



I would also use map, otherwise try using (range) instead of your iterate.

--
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: lazy list comprehension

2014-06-27 Thread Linus Ericsson
You probably want map-indexed

http://clojuredocs.org/clojure_core/1.2.0/clojure.core/map-indexed

/L


2014-06-27 17:10 GMT+02:00 Leonardo Borges leonardoborges...@gmail.com:

 Try using map :

 (map str '(my-list-of-crap) (iterate inc 0))

 --
 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 unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.


-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: lazy list comprehension

2014-06-27 Thread Leonardo Borges
Try using map :

(map str '(my-list-of-crap) (iterate inc 0))

-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: lazy list comprehension

2014-06-27 Thread Glen Rubin
yes, map-indexed seems to make the most sense here.  thanks

On Friday, June 27, 2014 8:13:53 AM UTC-7, Linus Ericsson wrote:

 You probably want map-indexed

 http://clojuredocs.org/clojure_core/1.2.0/clojure.core/map-indexed

 /L


 2014-06-27 17:10 GMT+02:00 Leonardo Borges leonardo...@gmail.com 
 javascript::

 Try using map :

 (map str '(my-list-of-crap) (iterate inc 0)) 

 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@googlegroups.com 
 javascript:
 Note that posts from new members are moderated - please be patient with 
 your first post.
 To unsubscribe from this group, send email to
 clojure+u...@googlegroups.com javascript:
 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 unsubscribe from this group and stop receiving emails from it, send an 
 email to clojure+u...@googlegroups.com javascript:.
 For more options, visit https://groups.google.com/d/optout.




-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: lazy list comprehension

2014-06-27 Thread Kevin Downey
On 6/27/14, 8:01 AM, Glen Rubin wrote:
 I have a list that I want to combine in some way with an incremented list, 
 so I was trying to write a for expression like this:
 
 (for [i '(my-list-of-crap), j (iterate inc 0)] (str i j))

the equivalent of this code written using map and mapcat is

(mapcat (fn [i] (map (fn [j] (str i j)) (iterate inc 0
'(my-list-of-crap))


so for every element of '(my-list-of-crap) you are creating an infinite
seq of numbers (iterate inc 0) and creating a string of each element of
'(my-list-of-crap) paired with each element of (iterate inc 0),
obviously an infinite seq of things, which will certainly take all your
memory

the main thing to realize is the nesting behaviour of for, and the
mechanical translation of for in to an inner call to map wrapped in
calls to mapcat

 
 
 The problem with this is that it yields an out of memory area.  I assume 
 this is b/c of my poor use of the iterate fn.  How can I do this in a lazy 
 way?  So that iterate only produces as many items as is needed to match the 
 number of items I have in '(my-list-of-crap).  Thanks!
 


-- 
And what is good, Phaedrus,
And what is not good—
Need we ask anyone to tell us these things?

-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.