Imagine a function with multiple parameters add(a,b) = a + b
. This function adds two numbers. Now imagine, in some context you need a function that takes just one parameter and you'd like to have a function that adds 5. That function could look like this: adds5(x) = 5 + x
.
Now, in some contexts you'd need a function that adds 5, in other contexts one that adds 10. So instead of writing various functions that do the same just with other constant, you can write a function that does return a function that adds a constant that is a parameter to the first function: adder(a) = (b) = a + b
.
The function add
and adder
look very similar. add
takes 2 parameters and adds them, the adder
returns a function that adds the parameter of adder
to its own parameter.
The transformation of add
to adder
is called currying.
Since this is so much related to functions, I'd say that when there is currying, then it is functional programming. You can do functional programming in any programming language - after all, all Turing complete languages are equivalent ;-) , but in functional languages that support functions as first class citizens, it is much easier.