make the list/e combinator be more fair

This commit is contained in:
Robby Findler 2014-03-19 15:28:59 -05:00
parent 09d78f0604
commit 67d16cbae5

View File

@ -800,9 +800,19 @@
;; list/e : listof (enum any) -> enum (listof any)
(define (list/e es)
(foldr cons/e
(const/e '())
es))
(define l (length es))
(cond
[(= l 0) (const/e '())]
[(= l 1) (map/e list car (car es))]
[else
(define split-point (quotient l 2))
(define-values (left right) (split-at es split-point))
(map/e
(λ (pr) (append (car pr) (cdr pr)))
(λ (lst)
(define-values (left right) (split-at lst split-point))
(cons left right))
(cons/e (list/e left) (list/e right)))]))
(define (nats+/e n)
(map/e (λ (k)