Scheme 格式中fibonacci序列的流
我目前正试图理解scheme中流的概念。例如,我应该编写一个函数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
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)))))