in-directory: sort entries

Make `in-directory` more like `directory-list` by sorting
directory content.
This commit is contained in:
Matthew Flatt 2016-09-11 08:43:50 -06:00
parent 903afe2240
commit cfb2a7aa32
2 changed files with 8 additions and 2 deletions

View File

@ -443,6 +443,10 @@ each element in the sequence.
content of a directory, use the result of @racket[directory-list] as content of a directory, use the result of @racket[directory-list] as
a sequence. a sequence.
The immediate content of each directory is reported as sorted by
@racket[path<?], and the content of a subdirectory is reported
before subsequent paths within the directory.
@examples[ @examples[
(code:comment @#,t{Given a directory tree:}) (code:comment @#,t{Given a directory tree:})
(code:comment @#,t{}) (code:comment @#,t{})
@ -485,7 +489,8 @@ each element in the sequence.
"/example/c"))]) "/example/c"))])
(printf "~a\n" p)))] (printf "~a\n" p)))]
@history[#:changed "6.0.0.1" @elem{Added @racket[use-dir?] argument.}]} @history[#:changed "6.0.0.1" @elem{Added @racket[use-dir?] argument.}
#:changed "6.6.0.4" @elem{Added guarantee of sorted results.}]}
@defproc*[([(in-producer [producer procedure?]) @defproc*[([(in-producer [producer procedure?])

View File

@ -6,6 +6,7 @@
"letstx-scheme.rkt" "letstx-scheme.rkt"
"member.rkt" "member.rkt"
"reverse.rkt" "reverse.rkt"
"sort.rkt"
'#%unsafe '#%unsafe
'#%flfxnum '#%flfxnum
(for-syntax '#%kernel (for-syntax '#%kernel
@ -2076,7 +2077,7 @@
eof)]]))) eof)]])))
(define (dir-list full-d d acc) (define (dir-list full-d d acc)
(for/fold ([acc acc]) ([f (in-list (reverse (directory-list full-d)))]) (for/fold ([acc acc]) ([f (in-list (reverse (sort (directory-list full-d) path<?)))])
(cons (build-path d f) acc))) (cons (build-path d f) acc)))
(define (next-body l d init-dir use-dir?) (define (next-body l d init-dir use-dir?)