我也给个惰性求值的例子: fibonacci 数列

发布于 2022-08-13 16:59:49 字数 298 浏览 21 评论 9

  1. #lang lazy
  2. (define (fibgen a b)
  3.   (cons a (fibgen b (+ a b))))
  4. (define fib (fibgen 0 1))

复制代码

  1. > (list-ref fib 100)
  2. 354224848179261915075

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

花期渐远 2022-08-17 16:32:39

那个...SICP的4.2里有提及,在Lazy下,List可以当Stream用.
而且List的car也是lazy的,所以可以写出Lazy binary tree这种数据结构...

旧情勿念 2022-08-17 16:27:11

终极版

f = 1 : 1 : zipWith (+) f (tail f)

地狱即天堂 2022-08-17 16:20:33

再来:

fb=1:1: (zipWith (+) fb  (tail fb))

南街九尾狐 2022-08-17 16:11:33

我也给一个

fibonaccis = 1 : 1 : [x+y | (x, y) <- zip fibonaccis (tail fibonaccis)]

[ 本帖最后由 izhier 于 2009-5-1 16:10 编辑 ]

最美不过初阳 2022-08-17 13:28:36

原帖由 win_hate 于 2008-9-22 11:56 发表

跟你那个比,最大的区别在哪里呢? 难道我这个勤劳一点?

其实这个和 lazy 不 lazy 的没什么关系,我们俩的实现实质上是一样的。不过借这个机会我倒是把 Haskell 的 list comprehension 好好看了一下

远昼 2022-08-17 11:08:36

原帖由 MMMIX 于 2008-9-22 11:40 发表

在 lazy scheme 中,car/cdr 可都属于 strict 操作。

跟你那个比,最大的区别在哪里呢? 难道我这个勤劳一点?

烟─花易冷 2022-08-17 02:19:17

原帖由 win_hate 于 2008-9-22 11:14 发表
scheme 里也可以自己扩展

pretty cool

[ 本帖最后由 MMMIX 于 2008-9-22 17:33 编辑 ]

哆兒滾 2022-08-16 14:48:13

scheme 里也可以自己扩展

  1. #lang lazy
  2. (define (adds s1 s2)
  3.   (cons (+ (car s1) (car s2))
  4.         (adds (cdr s1) (cdr s2))))
  5. (define fibs
  6.   (cons 0 (cons 1 (adds fibs (cdr fibs)))))

复制代码

  1. > (list-ref fibs 100)
  2. 354224848179261915075

复制代码

丶情人眼里出诗心の 2022-08-16 04:31:09

Haskell 的实现(使用了 GHC 的扩展)

  1. {-# OPTIONS_GHC -XParallelListComp #-}
  2. module Fibonacci where
  3. fibonaccis :: [Integer]
  4. fibonaccis = 1 : 1 : [ x + y | x <- fibonaccis | y <- tail fibonaccis ]

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文