diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2023-03-18 15:52:49 +0100 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2023-03-18 15:52:49 +0100 |
| commit | 1250939951cf17c168c6728cc916c055fa2e20c4 (patch) | |
| tree | 4766a128710e2058204758141f314c9b53e54259 /shared | |
| parent | 1f54fae2646f8078b68b42d0af3540df8d559f95 (diff) | |
fold-left and fold-right
Diffstat (limited to 'shared')
| -rw-r--r-- | shared/lists.rkt | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/shared/lists.rkt b/shared/lists.rkt index d5cfc61..4f2184d 100644 --- a/shared/lists.rkt +++ b/shared/lists.rkt @@ -1,4 +1,8 @@ #lang racket +(provide accumulate + accumulate-n + fold-right + fold-left) (define (append list1 list2) (if (null? list1) list2 @@ -22,3 +26,25 @@ (if (null? (cdr l)) l (last-pair (cdr l)))) + +(define (accumulate op initial sequence) + (cond ((null? sequence) initial) + (else (op (car sequence) + (accumulate op initial (cdr sequence)))))) + +(define (accumulate-n op init seqs) + (if (null? (car seqs)) + '() + (cons (accumulate op init (map car seqs)) + (accumulate-n op init (map cdr seqs))))) + +(define (fold-right op initial sequence) + (accumulate op initial sequence)) + +(define (fold-left op initial sequence) + (define (iter result rest) + (if (null? rest) + result + (iter (op result (car rest)) + (cdr rest)))) + (iter initial sequence)) |
