summary refs log tree commit diff
path: root/mew.scm
diff options
context:
space:
mode:
Diffstat (limited to 'mew.scm')
-rw-r--r--mew.scm12
1 files changed, 10 insertions, 2 deletions
diff --git a/mew.scm b/mew.scm
index aa438bd..e4a07c0 100644
--- a/mew.scm
+++ b/mew.scm
@@ -6,8 +6,8 @@
      dec def del-at div
      empty? eof esc
      fail fin final for fun*
-     gconcatenate gen generic-for-each genumerate get gfix giterate gmatch
-     gpick group-by-accumulator gslice-when gsplit gwindow
+     gconcatenate gen generator-xfold generic-for-each genumerate get
+     gfix giterate gmatch gpick group-by-accumulator gslice-when gsplit gwindow
      imp inc inject into
      juxt
      keys
@@ -750,6 +750,14 @@
                  (hash-table-values items)
                  (hash-table-update!/default items (f x) identity x)))))))
 
+  (define (generator-xfold f seed . gs)
+    (define (inner-xfold seed)
+      (let ((vs (map (lambda (g) (g)) gs)))
+        (if (any eof-object? vs)
+          seed
+          (inner-xfold (apply f seed vs)))))
+    (inner-xfold seed))
+
   (define-syntax one-of
     (er-macro-transformer
      (lambda (expr rename compare)