From 67d16cbae522713b2b25a29ebd115603908a664d Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Wed, 19 Mar 2014 15:28:59 -0500 Subject: [PATCH] make the list/e combinator be more fair --- .../redex-lib/redex/private/enumerator.rkt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt index 6462b6cb7c..e09c24bf2b 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt @@ -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)