hi,

As part of something I'm working on I want to convert a stream of values 
into a stream of pairs of values, e.g.

  1 2 3 4

becomes
  (1 2) (3 4)

The following seems to work fine:

(define (pairwise-stream astream)
  (if (stream-empty? astream)
      empty-stream
      (stream-cons
       (cons
        (stream-first astream)
        (stream-first (stream-rest astream)))
       (pairwise-stream
        (stream-rest (stream-rest astream))))))

but I'd like my 2nd or 3rd test to detect a problem with a stream of odd 
length and haven't figured out how yet. Here's my attempt (lengths 0 and 2 
work fine, length 1 shows a contract violation, but my test doesn't detect 
it):

(check-equal?
 (stream->list
  (pairwise-stream empty-stream))
 (stream->list empty-stream))

; hmmm, how to detect this correctly?
;(check-exn
; exn:fail:contract?
; (stream-first
;  (pairwise-stream (stream-cons 1 empty-stream))))

(check-equal?
 (stream->list (pairwise-stream (stream-cons 1 (stream-cons 2 
empty-stream))))
 (stream->list (stream-cons (cons 1 2) empty-stream)))

I'd be grateful for advice.

Cheers,

Tim

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to