how is the sicp cons-stream implemented?

前端 未结 2 444
悲&欢浪女
悲&欢浪女 2021-01-03 03:32

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)
          


        
相关标签:
2条回答
  • 2021-01-03 04:20

    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.

    0 讨论(0)
  • 2021-01-03 04:23

    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.

    0 讨论(0)
提交回复
热议问题