.
original commit: 47a29e2d3e6382f738c8e3069d212d513cc1fe98
This commit is contained in:
parent
5de0333c3d
commit
b593a9112b
|
@ -4686,26 +4686,27 @@
|
|||
(let ([l (with-handlers ([void (lambda (x) null)])
|
||||
(directory-list dir))]
|
||||
[dot? (send dot-check get-value)])
|
||||
(letrec ([sort (lambda (l)
|
||||
(if (or (null? l) (null? (cdr l)))
|
||||
l
|
||||
(let-values ([(l1 l2) (split l null null)])
|
||||
(merge (sort l1) (sort l2)))))]
|
||||
[split (lambda (l l1 l2)
|
||||
(cond
|
||||
[(null? l) (values l1 l2)]
|
||||
[(null? (cdr l)) (values (cons (car l) l1) l2)]
|
||||
[else (split (cddr l) (cons (car l) l1) (cons (cadr l) l2))]))]
|
||||
(letrec ([split (lambda (n l)
|
||||
(if (null? l)
|
||||
'(() . ())
|
||||
(if (< n 1)
|
||||
(cons (list (car l)) (cdr l))
|
||||
(let ([n (quotient n 2)])
|
||||
(let* ([r1 (split n l)]
|
||||
[r2 (split n (cdr r1))])
|
||||
(cons (merge (car r1) (car r2)) (cdr r2)))))))]
|
||||
[merge (lambda (l1 l2)
|
||||
(cond
|
||||
[(null? l1) l2]
|
||||
[(null? l2) l1]
|
||||
[(string<? (car l1) (car l2)) (cons (car l1) (merge (cdr l1) l2))]
|
||||
[else (merge l2 l1)]))])
|
||||
[(string<? (car l1) (car l2))
|
||||
(cons (car l1) (merge (cdr l1) l2))]
|
||||
[else (cons (car l2) (merge (cdr l2) l1))]))]
|
||||
[sort (lambda (l) (car (split (length l) l)))])
|
||||
(let-values ([(ds fs)
|
||||
(let loop ([l l][ds null][fs null])
|
||||
(cond
|
||||
[(null? l) (values (cons ".." (sort (reverse! ds))) (sort (reverse! fs)))]
|
||||
[(null? l) (values (cons ".." (sort ds)) (sort fs))]
|
||||
[(and (not dot?) (char=? (string-ref (car l) 0) #\.)) (loop (cdr l) ds fs)]
|
||||
[(file-exists? (build-path dir (car l))) (loop (cdr l) ds (cons (car l) fs))]
|
||||
[else (loop (cdr l) (cons (car l) ds) fs)]))])
|
||||
|
|
Loading…
Reference in New Issue
Block a user