Scheme continuation 学习之 tree->generator
最近在学习 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))
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论