summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris K. Jester-Young <cky944@gmail.com>2013-03-18 12:21:37 -0400
committerChris K. Jester-Young <cky944@gmail.com>2013-03-18 14:59:50 -0400
commitc33f45bef09523bea1545845c41cc6eb9068d6ae (patch)
tree8b0e2e81ea756a910460fd3c64b840c0c65864fb
parent41d0789599accd3030d22fccf4884e59b85147ed (diff)
downloadguile-c33f45bef09523bea1545845c41cc6eb9068d6ae.tar.gz
Simplify stream-unfolds further, based on Mark H. Weaver's feedback.
* module/srfi/srfi-41.scm (stream-unfolds): Don't use a promise to hold the result of the generator call. Originally I did that to avoid calling the generator more times than necessary, but Mark demonstrated that this code simplification doesn't affect that.
-rw-r--r--module/srfi/srfi-41.scm8
1 files changed, 2 insertions, 6 deletions
diff --git a/module/srfi/srfi-41.scm b/module/srfi/srfi-41.scm
index fd5ec32e2..45b03ad3b 100644
--- a/module/srfi/srfi-41.scm
+++ b/module/srfi/srfi-41.scm
@@ -395,12 +395,8 @@
(define (stream-unfolds gen seed)
(define-stream (generator-stream seed)
- ;; This uses delay/force, not stream-delay/stream-force, since only
- ;; the built-in version supports multiple-value results.
- (define promise (delay (gen seed)))
- (stream-cons (receive (_ . items) (force promise)
- (list->vector items))
- (generator-stream (first-value (force promise)))))
+ (receive (next . items) (gen seed)
+ (stream-cons (list->vector items) (generator-stream next))))
(define-stream (make-result-stream genstrm index)
(define head (vector-ref (stream-car genstrm) index))
(define-stream (tail) (make-result-stream (stream-cdr genstrm) index))