Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35588
  • 博文数量: 6
  • 博客积分: 587
  • 博客等级: 下士
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-16 02:17
文章分类

全部博文(6)

文章存档

2010年(6)

分类:

2010-10-31 22:59:48

最近在学习 scheme 中的 continuation,终于把 tree-generator(Teach Yourself Scheme in Fixnum Days) 看懂了,根据自己的理解又写了一个改良版本,比较容易理解。

;;;    Function: tree->generator
;;;    Example:
;;;    > (define t '(1 (2) 3))
;;;    > (define gen (tree->generator t))
;;;    > (gen)
;;;    1
;;;    > (gen)
;;;    2
;;;    > (gen)
;;;    3
;;;    > (gen)
;;;    '()
;;;    > (gen)
;;;    '()

(define (tree->generator tree)
  (let ((leaf #f) (walk-tree #f))
    (define (walk-tree)
      (let loop ((tree tree))
        (cond ((null? tree) 'skip)
              ((pair? tree) (loop (car tree))
                            (loop (cdr tree)))
              (else (call/cc
                     (lambda (rest-of-tree)
                       (set! walk-tree
                             (lambda ()
                               (rest-of-tree 'resume)))
                       (leaf tree))))))
      (leaf '()))
    (define (next)
      (call/cc
       (lambda (k)
         (set! leaf k)
         (walk-tree))))
    next))
阅读(1195) | 评论(1) | 转发(0) |
0

上一篇:Scheme continuation 之 amb

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2010-11-01 17:46:35

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com