(define-syntax topo (syntax-rules () ((topo ((n (m ...)) ...)) (letrec ((n (lambda () (set! n (lambda () (error 'n "is part of a cycle"))) (m) ... (set! n (lambda () "done")) (display 'n)(display " "))) ...) (n) ... )))) (define test (lambda () (topo ((a (b c e)) (b (d f)) (c (b)) (d ()) (e (b f)) (f (d))))))