Stream Scheme中的流-通过Scheme中的流映射定义整数

Stream Scheme中的流-通过Scheme中的流映射定义整数,stream,scheme,racket,sicp,lazy-sequences,Stream,Scheme,Racket,Sicp,Lazy Sequences,如何通过Scheme中的流映射定义整数: (define integers (stream-cons 1 (stream-map *something* *something*)) (定义整数(流cons 1(流映射*某物**某物*)) 有关流的更多信息,请参见。由@user448810提供的答案非常完美,它将在Racket中工作(它使用特定于Racket的过程)。但是这个问题也标有SICP,因此这是我的两分钱 仅用SICP中可用的方案子集回答问题,得到一个等价但略微不同的解决方案,只使用了在书

如何通过Scheme中的流映射定义整数:

(define integers (stream-cons 1 (stream-map *something* *something*)) (定义整数(流cons 1(流映射*某物**某物*))
有关流的更多信息,请参见。

由@user448810提供的答案非常完美,它将在Racket中工作(它使用特定于Racket的过程)。但是这个问题也标有
SICP
,因此这是我的两分钱

仅用SICP中可用的方案子集回答问题,得到一个等价但略微不同的解决方案,只使用了在书中定义的以下原始流操作:<代码>流NULL(流CONS)流CR DR <代码>。特别注意,代码>流图< /C> >不是标准PAR。在书中,它是根据原始操作实现的,与Racket的实现相比具有优势——它可以接收可变数量的流作为参数:

(define (stream-map proc . args)
  (if (stream-null? (car args))
      stream-null
      (stream-cons (apply proc (map stream-car args))
                   (apply stream-map (cons proc (map stream-cdr args))))))

(define (add-streams s1 s2)
  (stream-map + s1 s2))
有了上述步骤,就可以轻松定义
整数

(define ones (stream-cons 1
                          ones))

(define integers (stream-cons 1
                              (add-streams ones integers)))

您还可以使用SICP中的示例:

(define (integers-starting-from n)
  (cons-stream n (integers-starting-from (+ n 1))))

(define nats (integers-starting-from 1))
(define (integers-starting-from n)
  (cons-stream n (integers-starting-from (+ n 1))))

(define nats (integers-starting-from 1))