Scheme 格式中fibonacci序列的流

Scheme 格式中fibonacci序列的流,scheme,lisp,racket,Scheme,Lisp,Racket,我目前正试图理解scheme中流的概念。例如,我应该编写一个函数fibonacci,它返回fibonacci数作为流表示 该函数的预期输出/用法如下所示: > (define a (finbonacci)) > a ((0 0) . #<promise>) > (tail a) ((1 1) . #<promise>) > (tail (tail a)) ((2 1) . #<promise>) (define the-empty-s

我目前正试图理解scheme中流的概念。例如,我应该编写一个函数
fibonacci
,它返回fibonacci数作为流表示

该函数的预期输出/用法如下所示:

> (define a (finbonacci))
> a
((0 0) . #<promise>)
> (tail a)
((1 1) . #<promise>)
> (tail (tail a))
((2 1) . #<promise>)
(define the-empty-stream '())

(define-syntax cons-stream
  (syntax-rules ()
    ((cons-stream x y)
     (cons x (delay y)))))

(define head car)
(define (tail s) (force (cdr s)))
(define empty-stream? null?) 
我目前对解决方案的基本尝试如下:

(define fibo
    (cons-stream 1
                 (cons-stream 1
                              (map + fibo (tail fibo))))))

但是,即使这会计算出任何东西,我也不知道如何将
n
传递到输出或下面的流中

你走的是正确的道路。唯一需要调整的是递归定义的精确公式

考虑以下情况(其中---表示我们正在添加):

请注意,
(stream rest(stream rest fib))
fib
(stream rest fib)
的总和。 这意味着我们可以将
fib
定义为:

(define fib (stream-cons 1 (stream-cons 1 (stream-add fib (stream-rest fib)))))

这个解决方案是如何工作的?我不知道
在这里如何工作。我猜当再次调用
f
时,
f
参数的三个初始值将被“溢出”?
(define fib (stream-cons 1 (stream-cons 1 (stream-add fib (stream-rest fib)))))