Stream Scheme中的流-通过Scheme中的流映射定义整数
如何通过Scheme中的流映射定义整数: (define integers (stream-cons 1 (stream-map *something* *something*)) (定义整数(流cons 1(流映射*某物**某物*))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中可用的方案子集回答问题,得到一个等价但略微不同的解决方案,只使用了在书
有关流的更多信息,请参见。由@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))