~ruther/guix-local

e3c83a7cd3618a87d74e58973dcd82e560e2da97 — Ludovic Courtès 8 years ago 4363767
memoization: (mlambda () ...) allows for inner 'define'.

Previously (mlambda () (define foo 2) bar) would trigger a syntax error.

* guix/memoization.scm (%mlambda): In the zero-argument case, move
BODY... to a lambda to allow for inner 'define' and such.
1 files changed, 3 insertions(+), 2 deletions(-)

M guix/memoization.scm
M guix/memoization.scm => guix/memoization.scm +3 -2
@@ 76,10 76,11 @@ the result is returned via (apply values results)."
exactly one value."
    ((_ cached () body ...)
     ;; The zero-argument case is equivalent to a promise.
     (let ((result #f) (cached? #f))
     (let ((result #f) (cached? #f)
           (compute (lambda () body ...)))
       (lambda ()
         (unless cached?
           (set! result (begin body ...))
           (set! result (compute))
           (set! cached? #t))
         result)))