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)))