免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4086 | 回复: 0
打印 上一主题 下一主题

Scheme continuation 学习之 tree->generator [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-09 01:13 |只看该作者 |倒序浏览
最近在学习 scheme 中的 continuation,终于把 tree-generator(Teach Yourself Scheme in Fixnum Days) 看懂了,
根据自己的理解又写了一个改良版本,比较容易理解。
  1. ;;;    Function: tree->generator
  2. ;;;    Example:
  3. ;;;    > (define t '(1 (2) 3))
  4. ;;;    > (define gen (tree->generator t))
  5. ;;;    > (gen)
  6. ;;;    1
  7. ;;;    > (gen)
  8. ;;;    2
  9. ;;;    > (gen)
  10. ;;;    3
  11. ;;;    > (gen)
  12. ;;;    '()
  13. ;;;    > (gen)
  14. ;;;    '()

  15. (define (tree->generator tree)
  16.   (let ((leaf #f) (walk-tree #f))
  17.     (define (walk-tree)
  18.       (let loop ((tree tree))
  19.         (cond ((null? tree) 'skip)
  20.               ((pair? tree) (loop (car tree))
  21.                             (loop (cdr tree)))
  22.               (else (call/cc
  23.                      (lambda (rest-of-tree)
  24.                        (set! walk-tree
  25.                              (lambda ()
  26.                                (rest-of-tree 'resume)))
  27.                        (leaf tree))))))
  28.       (leaf '()))
  29.     (define (next)
  30.       (call/cc
  31.        (lambda (k)
  32.          (set! leaf k)
  33.          (walk-tree))))
  34.     next))
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP