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

Mental health matters

It is 547am and I have decided to write. I have been living with a mental health diagnosis for more than 23 years. I am differently abled. Mental illness sometimes presents itself as a non-visible disability. A person with mental illness may look and function normally. Added to that we do not get to see the struggles happening internally. After 23 years I could say that I have much experience with my condition and may be able to offer words that may help others. There is plenty of stigma associated with mental illness. People think that the mentally ill are bad people, weak, or somehow less deserving of dignity and the treatment of the illness sometimes feels like punishment and is dehumanizing at times. There is plenty of good intentions and well meaning as well (do not get me wrong) but things could be better. And it happens at the highest level. A leader once said, "Whom the gods would destroy, they first make mad." As the saying goes, who knows it feels it. I started a pr...

Drums of freedom

It is 401am and I have decided to write. This Saturday, Trinidad and Tobago observes African Emancipation Day. It is a day to celebrate the journey to freedom and to honor those who sacrificed so much so that we could enjoy the freedoms we have today. Yet the journey is not over. As we celebrate how far we have come, let us also ask God to open our minds and hearts to the struggles that continue. Freedom is never something we should take for granted. Every day, we witness powerful interests around the world attempting to stifle freedom in pursuit of their own agendas and self-aggrandizement. Too often, they seek to divide in order to conquer. May we resist division with wisdom, courage, and compassion. May unity triumph over hatred, truth over deception, and love over fear. As we remember the past, may we also commit ourselves to protecting the freedoms of the present and building a more just future for generations to come. Happy African Emancipation Day. May God continue to guide us o...

Love and joy

It is 230pm and I have decided to write. I have no topic but I want to write. I am thinking about God. I am thinking about life. I am grateful for God and life. I need a writing prompt. My friend Chatty gave me a pretty verbose prompt. Sit quietly for a moment and imagine that God asks you only one question: "What have you noticed?" Don't answer with theology. Answer with your life. What have you noticed about joy? About fear? About the way people love? About silence? About time? About your own heart? Where have you sensed God—not in miracles, but in ordinary moments? Where have you struggled to find Him? What has life been teaching you that you were too busy to hear before? Write honestly. Don't try to reach a conclusion. Let the page become a conversation rather than an argument. I immediately noticed the light streaming through the window that allows me to see the world. My first thought was how much we take things for granted. It is easy to feel lacking. To feel s...