On 2012-09-19 20:57:59 -0700, John Clements wrote: > (define thunk (lambda () 14)) > > (for/list ([i 10][e (in-producer thunk #f)]) e) > > … but I feel like there must be some way to simply write (stream-take > thunk 10). Am I missing something obvious?
How about (for/list ([i 10]) (thunk)) ? Or do you really want it to be a stream? You could write `stream-take` and use `in-producer`, but unfortunately sequences are not necessarily streams, so it doesn't seem to be much better: (require unstable/match) (define/match (stream-take strm n) [((? stream-empty?) n) empty-stream] [(_ 0) empty-stream] [(strm n) (stream-cons (stream-first strm) (stream-take (stream-rest strm) (sub1 n)))]) (stream-take (sequence->stream (in-producer thunk #f)) 10) BTW: should `racket/stream` have `stream-take` and other friends like `stream-drop`? They're in SRFI-41. Cheers, Asumu ____________________ Racket Users list: http://lists.racket-lang.org/users