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))))))