[racket-dev] Need a clarification on the implementation of stream-map

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Tue Jul 10 14:22:38 EDT 2012

And thus, the type of stream-map is NOT

stream-map : (a -> b) (stream a) -> (stream b)

 but

stream-map : (a b c ... -> d e f ...) (stream a b c ...) -> (stream d e f ...)

Jay

On Sun, Jul 8, 2012 at 8:00 AM, Robby Findler
<robby at eecs.northwestern.edu> wrote:
> I'm not sure about the rationale behind the design of stream-map, but
> "any" as a result contract for a function indicates it may return
> multiple values (in the range of a function "any" is a special
> keyword). "any/c" is a contract for a single value.
>
> Robby
>
> On Sun, Jul 8, 2012 at 6:25 AM, Daniel King <danking at ccs.neu.edu> wrote:
>> Question 0:
>>
>> In collects/racket/stream.rkt, `stream-map' is defined as:
>>
>>   (define (stream-map f s)
>>     (unless (procedure? f) (raise-argument-error 'stream-map "procedure?" f))
>>     (unless (stream? s) (raise-argument-error 'stream-map "stream?" s))
>>     (let loop ([s s])
>>       (cond
>>        [(stream-empty? s) empty-stream]
>>        [else (stream-cons (call-with-values (lambda () (stream-first s)) f)
>>                           (loop (stream-rest s)))])))
>>
>>
>> I don't understand the difference between:
>>
>>   (call-with-values (lambda () (stream-first s)) f)
>>
>> and
>>
>>   (f (stream-first s))
>>
>> because the contract for `stream-first' is:
>>
>>   (stream-first s) → any
>>   s : (and/c stream? (not/c stream-empty?))
>>
>> Which seems to me to just return a single value. I was taking a second look at
>> my changes to `stream-map' which add support for multiple streams. I noticed
>> this unusual snippet as I rebased onto the latest version of plt/master.
>>
>>
>> Question 1:
>>
>> Would it make more sense to simply update all the sequence procedures to handle
>> multiple sequences? Is there a circumstance where it doesn't make sense to
>> handle multiple sequences in a sequence procedure such as `sequence-map'?
>>
>> I figure that the sequence procedures don't support multiple sequences is just
>> lack of interest. Do most people just use the `for' macros in these cases?
>>
>> --
>> Dan King
>> College of Computer and Information Science
>> Northeastern University
>>
>> _________________________
>>   Racket Developers list:
>>   http://lists.racket-lang.org/dev
>
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev



-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93


Posted on the dev mailing list.