Comments (2)
first, I just wanted to congradulate you on some very impressive work!
Thank you. Comments like that mean a lot
I definitely agree that having the accumulator last is better when composing functions.
I realize that the documentation is quite poor in this regard, but in List foldr
gives the accumulator last and foldl
gives the accumulator first. That is the order used often in functional programming and I think it makes sense. The explanation I've read is to think of foldr
as inserting the function between the elements in the list in a right-associative manner and then foldl
doing that left-associative. This example shows what I mean.
const f = (n, m) => n - m;
foldr(f, 0, list(1, 2, 3, 4)); //=> f(1, f(2, f(3, f(4, 0)))) = (1 - (2 - (3 - (4 - 0))))
foldl(f, 0, list(1, 2, 3, 4)); //=> f(f(f(f(0, 1), 2), 3), 4) = ((((0 - 1) - 2) - 3) - 4)
In the foldr
case the accumulator "naturally" appears as the second argument to the function and for foldl
it is first.
The reduce
function in Fantasy Land and Ramda gives the accumulator first which is ok as they are left folds. The reduceRight
function in Ramda gives the accumulator as the second argument which is also great.
I think that in functional programming foldr
should be the default fold. This is in contrast to JavaScript where the left folding reduce
is the default fold people use. That is a big part of the reason why List prefers the names foldr
and foldl
instead of reduce
and reduceRight.
What I'm trying to say is: List is currently consistent with Haskell and Ramda and I recommend using foldr
which gives the nice argument order
What do you think about that?
from list.
As explained above I think List's foldr
/reduceRight
and foldl
/reduce
is consistent with both typical FP conventions and Ramda in particular. So I'm going to close this issue. Feel free to open it @wishfoundry if you disagree
from list.
Related Issues (20)
- vindum.io link in README is broken HOT 1
- npm.js package is not linked to github repo HOT 4
- support sanctuary-show HOT 6
- groupWith seems broken HOT 6
- question: flatMap/chain and iterables HOT 3
- bugs: list returns wrong results (likely bug in drop function) HOT 12
- at least one other bug in the list HOT 19
- list throws HOT 5
- NonEmptyList HOT 7
- list will not release items for GC HOT 4
- What about `reduced`? HOT 7
- Reverse iteration HOT 10
- Stop mutating HOT 2
- multi-field sort HOT 8
- Can't find fromArray HOT 2
- .random possible? HOT 1
- head() is missing? HOT 3
- nth() throws when it's passed NaN HOT 2
- Access the index on map() operations HOT 4
- findLastIndex HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from list.