The procedure times$ produces a stream whose tokens are
m times the tokens of the integer input stream S$.
The term ((cdr S$)) produces a pair containing the next token
of S$ and a procedure to compute all the remaining tokens after
the next one. But without the (lambda () ...),
(times$ m ((cdr S$))) would then eagerly compute all the
tokens of the stream and reach maximum recursion depth in the case of
an infinite stream. Thus, the next token is "forced" by the ((cdr
S$)) then delayed by the (lambda () ..,).