diff options
Diffstat (limited to 'module/srfi/srfi-1.scm')
-rw-r--r-- | module/srfi/srfi-1.scm | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/module/srfi/srfi-1.scm b/module/srfi/srfi-1.scm index 1e006c753..d6cefcdbd 100644 --- a/module/srfi/srfi-1.scm +++ b/module/srfi/srfi-1.scm @@ -419,14 +419,18 @@ that result. See the manual for details." (define (fold-right kons knil clist1 . rest) (if (null? rest) - (let f ((list1 clist1)) - (if (null? list1) - knil - (kons (car list1) (f (cdr list1))))) - (let f ((lists (cons clist1 rest))) - (if (any null? lists) - knil - (apply kons (append! (map1 car lists) (list (f (map1 cdr lists))))))))) + (let loop ((lst (reverse clist1)) + (result knil)) + (if (null? lst) + result + (loop (cdr lst) + (kons (car lst) result)))) + (let loop ((lists (map1 reverse (cons clist1 rest))) + (result knil)) + (if (any1 null? lists) + result + (loop (map1 cdr lists) + (apply kons (append! (map1 car lists) (list result)))))))) (define (pair-fold kons knil clist1 . rest) (if (null? rest) |