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.
This commit is contained in:
parent
4363767394
commit
e3c83a7cd3
|
@ -76,10 +76,11 @@ the result is returned via (apply values results)."
|
||||||
exactly one value."
|
exactly one value."
|
||||||
((_ cached () body ...)
|
((_ cached () body ...)
|
||||||
;; The zero-argument case is equivalent to a promise.
|
;; The zero-argument case is equivalent to a promise.
|
||||||
(let ((result #f) (cached? #f))
|
(let ((result #f) (cached? #f)
|
||||||
|
(compute (lambda () body ...)))
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(unless cached?
|
(unless cached?
|
||||||
(set! result (begin body ...))
|
(set! result (compute))
|
||||||
(set! cached? #t))
|
(set! cached? #t))
|
||||||
result)))
|
result)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue