We have seen a number of useful stream funtions, as counterparts to well-known list functions.
First, consider if/how to program a stream-append function, as a counterpart to append. Here is a possible recursive append function for lists:
(define (my-append lst1 lst2) (cond ((null? lst1) lst2) (else (cons (car lst1) (my-append (cdr lst1) lst2)))))
How will your stream-append function work on infinite streams, such as nat-nums or fibs?
Now program a similar function, stream-merge, that merges two streams by simple alternation.
How will stream-merge function work on initinite streams? And on finite streams?
Can you use stream-merge to produce as stream of all integers (in some arbitrary order), based on two other streams with fixed starting points?
Here is all you need to get started:
(define-syntax cons-stream (syntax-rules () ((cons-stream x y) (cons x (delay y))))) (define head car) (define (tail stream) (force (cdr stream))) (define empty-stream? null?) (define the-empty-stream '()) (define (stream-section n stream) (cond ((= n 0) '()) (else (cons (head stream) (stream-section (- n 1) (tail stream))))))