Javascript功能懒惰评估示例说明需要

前端之家收集整理的这篇文章主要介绍了Javascript功能懒惰评估示例说明需要前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
浏览 Hacker News和我碰到了 http://streamjs.org/,这是一个在JavaScript中的惰性评估集合的实现.

其中一个例子是:

function ones() {  
    return new Stream( 1,ones );  
}  
function naturalNumbers() {  
    return new Stream(  
        // the natural numbers are the stream whose first element is 1...  
        1,function () {  
            // and the rest are the natural numbers all incremented by one  
            // which is obtained by adding the stream of natural numbers...  
            // 1,2,3,4,5,...  
            // to the infinite stream of ones...  
            // 1,1,...  
            // yielding...  
            // 2,6,...  
            // which indeed are the REST of the natural numbers after one  
            return ones().add( naturalNumbers() );  
        }   
    );  
}  
naturalNumbers().take( 5 ).print(); // prints 1,5

也许晚上太晚了,我错过了这一点,但我不明白如何打印1,5.我会期望它打印1,2和死亡的无限深递归.我明白如何打印无限的1.我没有得到自然人如何工作.

通过我的(显然是不正确的)逻辑,第一次调用naturalNumbers返回的Stream的头将为1,流中的下一个元素被评估为1().add(naturalNumbers());这是一个().add(1),后跟一个().add(naturalNumbers()),将重新设置为1等等…

真的很感激,如果有人会在这方面有所作为.

解决方法

naturalNumbers[0] = 1 // by definition
naturalNumbers[1] = ones[0] + naturalNumbers[0] = 1 + 1 = 2
naturalNumbers[2] = ones[1] + naturalNumbers[1] = 1 + 2 = 3
naturalNumbers[3] = ones[2] + naturalNumbers[2] = 1 + 3 = 4
...

关键的是,function(){return ones().add(naturalNumbers())}不返回一个元素,它返回一个流.在这种情况下,由该流生成后续元素,即“求和”流.因此,与ones()不同,naturalNumbers()不直接调用它.相反,它间接地调用自身,由总结流介导.

猜你在找的JavaScript相关文章