[racket-dev] Need a clarification on the implementation of stream-map
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