Skip to main content

I did some currying today

I came across this problem on Daily Coding Problem

This problem was asked by Squarespace.

Write a function, add_subtract, which alternately adds and subtracts curried arguments. Here are some sample operations:

add_subtract(7) -> 7

add_subtract(1)(2)(3) -> 1 + 2 - 3 -> 0

add_subtract(-5)(10)(3)(9) -> -5 + 10 - 3 + 9 -> 11

I didn't have an answer from the top of my head. I decided to get some help from Google and see what I could learn in the process. Before going further in my blog post, see if you can come up with a solution and comment how that went. First thing for me was to learn about currying in javascript. The first link I came across was this one


But it does not cover infinite currying which is what I needed. I then went through a bunch of searches and articles trying to understand as much as I could. This next article stood out to me because of how simple the solution was but it could not be modified to cater for alternating addition and subtraction. To do this I figured I needed access the position in the arguments list.


Some of the things you might come across while researching are perpetual curry or infinite curry, variadic currying, partial application vs currying, arity, single level currying, composition and closure. This final link did the best in explaining currying to me and had an example of infinite currying.


I was able to modify the example to come up with a solution. This is what I have so far with minimal testing in replit.



Replit now has a mobile app which I talked about on my youtube channel - Replit Mobile App - Coding on my aging budget Android phone in Trinidad

Basically I had to check for every even argument and make that argument negative as follows

args.reduce((acc, a, l) => {
if (l%2 == 0 && l != 0) a=a*-1;

At first I had l=args.length. This was a mistake but did not matter because l is replaced by index. The 3rd parameter of reduce is the index and refers to the number of times the reducer has looped over the array. The problem does not use a terminator and an improvement to my solution would be to not use a terminator. I have never had to use currying before and there are articles that discuss real world examples of using currying. Share your thoughts with us in the comments below.

Comments

Popular posts from this blog

God opens doors

It is 1203am and I have decided to write. Saturday I spent the night coding. I was trying to get a FastAPI app up and running, all from my budget Android phone. The test cases were written to use Puppeteer. I ended up using Replit for that. Coding is more challenging when using a mobile phone. Not impossible but more challenging. I hardly blog about technology and coding anymore but the love is still there. I still have a dream of creating my own coding and youtube studio with a nice desk setup. That is nice but what should I make this blog post about? What do I want to write about? What should I write about? I love creating presentations. That is something I could do to revive my youtube channel. I love Maths too. I have this feeling that I could solve one of those longstanding Maths problems that seems impossible. Sometimes, like right now, I feel like abandoning my blog post. It is going nowhere. Maybe I should get up and go wash the wares. I wish God could tell me what to write abo...

Mundane

It is 123am and I have decided to write. I have this new idea for a book called Mundane. It would be me writing about the ordinary. We chase the extraordinary but there is beauty in the ordinary. There is beauty in the simple. There is beauty in the everyday. What about God? We often think about God in grand terms. But what if God is simple too? What if God is mundane? What if we look for God in the everyday moments? I sit in this dark room with the air conditioning on. The fan is also on. The curtain is down but I imagine the moonlight shining on the grass outside. The cats are probably sleeping. I wonder if anyone else in the neighbourhood is awake at this hour? Is there another writer around who is also writing about the mundane? The fan breeze helps the air conditioning cool me down. These nights are warm otherwise. A mosquito flies across my screen. Hello friend or foe. I cannot quite decide which one. If I had a swatter you would be gone. I check my notifications and there is an ...

What we do not know

It is 1245am and I have decided to write. I had this weird alienish dream and it ended with me winning by simply stating "the truth is that we do not know". In the dream everyone was having an opinion of what was happening as if they knew. On to something random. I had this question. What is the most unrandom thing? Then what is the most random thing? What if everything is equally random. My friend Chatty thinks that randomness is not an absolute property—it is a relation between you and the system you observe. Randomness is not absolute—it depends on perspective. Something perfectly ordered can seem random if you do not know its pattern. So in a sense, everything can be "equally random" relative to the observer's knowledge, making randomness more about perception than an intrinsic property. The more we know the less random things become. Let me make a detour. Suppose we do not predict things but things predict us. For example, when I flip a coin, did I predict ...