id summary reporter owner description type status priority milestone component resolution keywords cc planetversion pltversion 18 stream-split-at dherman dherman "Steve Huwig wrote: > Hi, > > `stream-split-at' in stream.plt 1 1 only returns one value, and > attempting to use that value results in errors. I looked at the source > and I think there's a simple oversight: {{{ (define (stream-split-at i stream) (stream-delay ; ^^^^^^^^^^^^ (cond [(zero? i) (values stream-null stream)] [(stream-null? stream) (values stream-null stream-null)] [else (let-values ([(prefix suffix) (stream-split-at (sub1 i) (stream-cdr stream))]) (values (stream-cons (stream-car stream) prefix) suffix))]))) }}} > I don't think stream-delay is correct here! At least, when I changed the > code to: {{{ (define (stream-split-at i stream) (cond [(zero? i) (values stream-null stream)] [(stream-null? stream) (values stream-null stream-null)] [else (let-values ([(prefix suffix) (stream-split-at (sub1 i) (stream-cdr stream))]) (values (stream-cons (stream-car stream) prefix) suffix))])) }}} > the routine behaved as I expected. > > Is this a bug or am I missing something basic? Do you have a good > example of using stream-split-at? With the original code, I tried: > >> > (stream-split-at 3 (list->stream (list 1 2 3 4 5 6))) > # >> > (stream-car (stream-split-at 3 (list->stream (list 1 2 3 4 5 6)))) > . context (lexical binding) expected 2 values, received 1 value: > # >> > > > which left me cold, but with the new code, I was able to do: > >> > (stream-split-at 3 (list->stream (list 1 2 3 4 5))) > # > # >> > (let-values ([(front back) (stream-split-at 3 (list->stream (list 1 2 > 3 4 5)))]) > (values (stream->list front) (stream->list back))) > (1 2 3) > (4 5) > > which is about what I expected to need to do. > > If this is a bug, then I think stream-partition and stream-span suffer > the same bug. If it's not a bug, then apparently the bug is in my brain > for not figuring out the right API. > > Thanks, > Steve Huwig > > P.S. stream-split-at reverses the order of split-at arguments from > SRFI-1, not sure if that's deliberate. > " defect new major dherman/stream.plt