I\'m working through the streams section of the scip and am stuck on how to define a stream.
The following is my code:
(define (memo-func function)
You cannot define delay as a function, since prior to calling it, Scheme will evaluate its argument - which is exactly what you're trying to postpone. SICP says this explicitly that delay should be a special form.
cons-stream
needs to be a macro in order for your sample code to work correctly. Otherwise the invocation of cons-stream
will evaluate all its arguments eagerly.
Try this (not tested):
(define-syntax cons-stream
(syntax-rules ()
((cons-stream a b)
(cons a (memo-func (lambda () b))))))
P.S. Your delay
needs to be a macro also, for similar reasons. Then after you fix delay
, you can make your cons-stream
use delay
directly.