One more try, to fix problems with adding relative paths and for a starting path that isn't an existing directory:
(define (in-directory6 [orig-dir #f]) (define init-dir (current-directory)) ;; current state of the sequence is a list of paths to produce; when ;; incrementing past a directory, add the directory's immediate ;; content to the front of the list: (define (next l) (define d (car l)) (define full-d (path->complete-path d init-dir)) (if (directory-exists? full-d) (append (dir-list full-d d) (cdr l)) (cdr l))) (define (dir-list full-d d) (for/list ([f (in-list (directory-list full-d))]) (build-path d f))) (make-do-sequence (lambda () (values car next (if orig-dir (dir-list (path->complete-path orig-dir init-dir) orig-dir) (directory-list init-dir)) pair? #f #f)))) _________________________ Racket Developers list: http://lists.racket-lang.org/dev