首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案--我该如何解释这样的输出?

方案--我该如何解释这样的输出?
EN

Stack Overflow用户
提问于 2017-10-18 03:11:23
回答 1查看 104关注 0票数 1

因此,我得到了以下定义:

代码语言:javascript
复制
(define head car)

(define (tail stream) (force (cdr stream)))

(define (addL x  y)(cons-stream (+   (head x)   (head y))(addL (tail x)   (tail y))))

(define fibs(cons-stream 1(cons-stream 1
    (addL (tail fibs) fibs))))

(define (reorder order-stream data-stream)
   (cond ((stream-null? order-stream) the-empty-stream)
        ((stream-null? data-stream) the-empty-stream)
        (else (cons-stream (stream-ref data-stream (stream-first order-stream))
                (reorder (stream-rest order-stream) data-stream)))))

我被要求显示前7个数字(我将在下面显示),并解释从这一行代码输出的数字:

代码语言:javascript
复制
(reorder (tail fibs) (tail fibs))

产生的流的前7个元素的输出是:

"2,3,5,13,55,610,28657“

有人知道怎么解释这件事吗?我不太明白这里到底发生了什么..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-19 21:17:06

fibs是斐波那契数的无限(懒惰)流,

代码语言:javascript
复制
fibs  = 1 , ft ...
ft    = 1 , (addL fibs ft) ...
; 1, 1, 2,  3,  5,  8,  13, ....

请允许我用伪代码写下reorder的定义,这样更容易理解,如下所示

代码语言:javascript
复制
(reorder js xs) = empty                         | if (empty? js) or (empty? xs)
                = xs[js[0]] , 
                   (reorder (rest js) xs) ...   | otherwise

请注意,xs不受影响地传递,js在每次迭代时都取其head元素。这意味着(reorder (stream i j k ... n ...) xs)逐渐接受了_i_th,然后_j_th,_k_th,. _n_th,.流xs中的元素。

因为调用是(reorder ft ft),所以产生的序列是

代码语言:javascript
复制
ft[ft[0]], ft[ft[1]], ft[ft[2]], ...

代码语言:javascript
复制
ft[1], ft[2], ft[3], ft[5], ft[8], ft[13], ....

这就是你所看到的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46802194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档