streams in racket

racket, scheme

Solution

For a general understanding of streams in Scheme, I'd recommend section §3.5 Streams in the SICP book. It'll teach you the basic concepts to solve stream-related problems such as the one in the question.

Regarding the problem in the question, here's the general idea to solve it:

- Build two infinite streams, one producing only the string `"red"` and the other `"blue"`

- Combine both streams taking one element from one and then one element from the other (alternating), this procedure is called `interleave` in SICP

Problem

Can anyone help me better understand how to write a stream? I understand that a stream is an infinite sequence of values and the way I have learned programming them is a representing them as a thunk that when called produces a pair of (1) the first element in the sequence and (2) a thunk that represents the stream for the second-through-infinity elements For example: ``` (define powers-of-two (letrec ([f (lambda (x) (cons x (lambda () (f (* x 2)))))]) (lambda () (f 2)))) ``` I understand here that it is just producing a powers of two and to access these for example calling `(car (powers-of-two))` would result in `2` and calling `(car ((cdr (powers-of-two))))` would result in 4 Now I am trying to write a stream called `red-blue` that alternates between strings `red` and `blue` but I am a little confused about how to construct it

Original source