Skip to content

Instantly share code, notes, and snippets.

@rik0
Created March 1, 2011 13:20
Show Gist options
  • Save rik0/849109 to your computer and use it in GitHub Desktop.
Save rik0/849109 to your computer and use it in GitHub Desktop.
;; original posted by Marco (https://me.yahoo.com/a/CkZaE3IH2YClbGr69za54DVt8pHk)
;; as a comment of
;; http://www.enrico-franchi.org/2011/02/callcc-i-yield-bah-lazy-seq.html
(define node-value car)
(define node-left cadr)
(define node-right caddr)
(define children cdr)
(define *example* '(3 (4 () ()) (2 1 (0 () (-1 () ())))))
(define (generate tree)
(let ((jump #f))
(letrec ((generate-values
(lambda ()
(let loop ((tree tree))
(cond
((null? tree) '())
((pair? tree)
(loop (node-value tree))
(loop (node-left tree))
(loop (node-right tree)))
(else
(call/cc
(lambda (rest)
(set! generate-values
(lambda ()
(rest 'resume)))
(jump tree))))))
(jump '()))))
(lambda ()
(call/cc
(lambda (k)
(set! jump k)
(generate-values)))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment