What I'd like to do is this: For all sequences, provide either `fold` and `fold-right` with SRFI 1 conventions (the accumulation is the rightmost argument) or `foldl` and `foldr` with SRFI 43 conventions (accumulator is the leftmost argument). Currently all the vector-like SRFIs use SRFI 43 conventions with the names `fold` and `right-fold` as a consequence of being textually descended from SRFI 43, so these SRFIs would be changed incompatibly, but at least it is not a silent breaking change.
I say "leftmost" and "rightmost" because folds over dictionaries pass three arguments to the folding function: (key value accumulation). On Fri, Sep 23, 2022 at 5:25 AM Marc Nieper-Wißkirchen < [email protected]> wrote: > Am Do., 22. Sept. 2022 um 23:14 Uhr schrieb Lucier, Bradley J < > [email protected]>: > > [...] > > > In SRFI 231, as in Haskell and Ocaml, as I understand it, foldl calls >> > kons with the list element as the right argument, and foldr calls kons >> > with the list element as the left argument. >> > >> > R6RS has `fold-left` and `fold-right` with the same conventions as you >> have. No need to cite a different language (with quite different >> evaluation semantics in the case of Haskell). >> > >> > SRFI 1's `fold` is R6RS's `fold-right` with the exchanged order when >> calling the combiner. >> > >> > Any comment about this? (Or did I miss one?) >> > >> > In view of established names in the Scheme world, `fold-left` and >> `fold-right` seem to be better choices than `foldl` and `foldr`. (And >> everyone who knows `fold-left` and `fold-right` can automatically guess how >> the argument order is in SRFI 231.) >> >> I made no comment. >> >> As far as I can see, SRFI 1’s “fold” is R6RS’s fold-left with the knil as >> the rightmost argument of the combiner, not the leftmost. >> >> I don’t attach too much importance to this small mistake, except that I >> find the plethora of competing fold/fold-left/fold-right in the Scheme >> world quite confusing, and I don’t want to propagate that confusion with >> this SRFI. >> > > As far as R6RS, SRFI 1, and naming conventions established by other > functional languages are concerned, everything is fine, I think. > > R6RS defines `fold-left` and `fold-right` in the style of `foldl` and > `foldr` of other functional programming languages (but with a more verbose > name as typical for Scheme). > > SRFI 1 offers `fold` as an alternative to `fold-left` with the arguments > exchanged for the combiner. > > [...] > > Because R6RS seems to have the same semantics for fold-left and fold-right >> as this SRFI, and because array-fold-right in SRFI 179 has the same >> definition as array-fold-right in SRFI 231 with one array argument, I may >> make the changes you suggest, I’ll have to think about it. >> > > Thanks, > > Marc > >
