array-fold, array-fold-right, and array-reduce Bradley Lucier (19 Aug 2021 19:10 UTC)
Re: array-fold, array-fold-right, and array-reduce Alex Shinn (20 Aug 2021 00:27 UTC)
Re: array-fold, array-fold-right, and array-reduce Bradley Lucier (20 Aug 2021 00:58 UTC)
Re: array-fold, array-fold-right, and array-reduce Alex Shinn (20 Aug 2021 03:07 UTC)
Re: array-fold, array-fold-right, and array-reduce John Cowan (20 Aug 2021 20:31 UTC)
Re: array-fold, array-fold-right, and array-reduce Bradley Lucier (23 Aug 2021 00:51 UTC)

Re: array-fold, array-fold-right, and array-reduce Bradley Lucier 20 Aug 2021 00:58 UTC

SRFI 1 says that

  reduce f ridentity list -> value
     reduce is a variant of fold.

     ridentity should be a "right identity" of the procedure f -- that
is, for any value x acceptable to f,

     (f x ridentity) = x

     reduce has the following definition:
     If list = (), return ridentity;
     Otherwise, return (fold f (car list) (cdr list)).
     ...in other words, we compute (fold f ridentity list).

If the idea is that

(array-reduce f a)

is the same as

(reduce f (array->list a))

then we don't have that

heine:~/programs/gambit/gambit> gsi
Gambit v4.9.3-1503-gd1a6c6bf

 > (import (srfi 179))
 > (define a (make-array (make-interval '#(2 2))
                       (lambda (i j)
                         (string->symbol (string-append "a_"
(number->string i) (number->string j))))))
 > (array-fold (lambda (l r) `(f ,l ,r)) 'init a)
(f a_11 (f a_10 (f a_01 (f a_00 init))))
 > (fold (lambda (l r) `(f ,l ,r)) 'init (array->list a))
(f a_11 (f a_10 (f a_01 (f a_00 init))))
 > (define (reduce f l) (fold f (car l) (cdr l)))  ;; l will never be ()
 > (reduce (lambda (l r) `(f ,l ,r)) (array->list a))
(f a_11 (f a_10 (f a_01 a_00)))
 > (array-reduce (lambda (l r) `(f ,l ,r)) a)
(f (f (f a_00 a_01) a_10) a_11)

So the question seems to be:

Do we want

(array-reduce f a)

to produce the same result as

(reduce f (array->list a))

where reduce is defined in SRFI 1.

Which leads to the secondary question that we perhaps don't want to
answer (or even ask):

Is reduce defined correctly in SRFI 1?

Brad