From 0f2a640d0230ad133ca17018517a919a87b9d63b Mon Sep 17 00:00:00 2001 From: Max New Date: Thu, 19 Sep 2013 01:30:46 -0700 Subject: [PATCH] Memoize redex thunk/e's. Tests run over twice as fast. --- .../redex-lib/redex/private/enumerator.rkt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt index 166d356885..179c2ae97f 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/enumerator.rkt @@ -670,11 +670,16 @@ ;; thunk/e : Nat or +-Inf, ( -> enum a) -> enum a (define (thunk/e s thunk) - (enum s - (λ (n) - (decode (thunk) n)) - (λ (x) - (encode (thunk) x)))) + (let* ([e #f] + [get-e (λ () + (or e + (and (set! e (thunk)) + e)))]) + (enum s + (λ (n) + (decode (get-e) n)) + (λ (x) + (encode (get-e) x))))) ;; many/e : enum a -> enum (listof a) ;; or : enum a, #:length natural -> enum (listof a)