From 5bde1a7f4936e991c86da20fe0a143b527161ae2 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Fri, 18 Nov 2022 20:11:31 +0100 Subject: inject: use generator-xfold, immediately xfold if generator is passed --- mew.scm | 6 ++++-- mew.svnwiki | 5 +++-- tests/test.mew | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/mew.scm b/mew.scm index e4a07c0..e3b88c3 100644 --- a/mew.scm +++ b/mew.scm @@ -773,9 +773,11 @@ (v (g))) (if (eof-object? v) (f) - (generator-fold f v g))))) + (generator-xfold f v g))))) ((f v) (lambda (o) - (generator-fold f v (gen o)))))) + (generator-xfold f v (gen o)))) + ((f v g) + ((inject f v) (gen g))))) (define (sing? l) (match l diff --git a/mew.svnwiki b/mew.svnwiki index 3b4fb3f..629d11b 100644 --- a/mew.svnwiki +++ b/mew.svnwiki @@ -458,12 +458,13 @@ Like {{generator-fold}}, but {{}} always takes the accumulator as first arguments, and the items after. This is more practical when multiple {{}} are passed. -(inject ?) +(inject ? ?) Returns a procedure that takes an generator (or something convertible -by {{gen}}) and folds the function {{}} over its values. If given, +by {{gen}}) and xfolds the function {{}} over its values. If given, folding starts with {{}}, else with the first element yielded by the generator. If the generator is empty, return {{()}}. +If {{}} is passed, immediately fold over the generator {{}}. (odometer ...) diff --git a/tests/test.mew b/tests/test.mew index ddf376c..7782fb6 100644 --- a/tests/test.mew +++ b/tests/test.mew @@ -444,7 +444,8 @@ (test 0 ((inject +) (generator))) (test 20 ((inject + 10) (generator 1 2 3 4))) (test 10 ((inject + 10) (generator))) - (test '((1 . 2) . 3) ((inject xcons) (generator 1 2 3)))) + (test '((1 . 2) . 3) ((inject cons) (generator 1 2 3))) + (test 20 (inject + 10 #(1 2 3 4)))) (test-group "sing?" (test #f (sing? '())) -- cgit 1.4.1