我也给个惰性求值的例子: fibonacci 数列
- #lang lazy
- (define (fibgen a b)
- (cons a (fibgen b (+ a b))))
- (define fib (fibgen 0 1))
复制代码
- > (list-ref fib 100)
- 354224848179261915075
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
那个...SICP的4.2里有提及,在Lazy下,List可以当Stream用.
而且List的car也是lazy的,所以可以写出Lazy binary tree这种数据结构...
终极版
f = 1 : 1 : zipWith (+) f (tail f)
再来:
fb=1:1: (zipWith (+) fb (tail fb))
我也给一个
fibonaccis = 1 : 1 : [x+y | (x, y) <- zip fibonaccis (tail fibonaccis)]
[ 本帖最后由 izhier 于 2009-5-1 16:10 编辑 ]
其实这个和 lazy 不 lazy 的没什么关系,我们俩的实现实质上是一样的。不过借这个机会我倒是把 Haskell 的 list comprehension 好好看了一下
跟你那个比,最大的区别在哪里呢? 难道我这个勤劳一点?
pretty cool
[ 本帖最后由 MMMIX 于 2008-9-22 17:33 编辑 ]
scheme 里也可以自己扩展
复制代码
复制代码
Haskell 的实现(使用了 GHC 的扩展)
复制代码