Function Currying is a concept of breaking a function with many arguments into many functions with single argument in such a way, that the output is same. In other words, its a technique of simplifying a multi-valued argument function into single-valued argument multi-functions.
Consider the example to clear the concept:
Currying breaks down higher order functions into a series of smaller cascaded functions which take in one argument and return a function except for the last cascaded function which returns the desired value.
For example:
Let there be a function which maps as
f:(u, v) -> w
Currying the above function will produce
g:(u->(v->w))
Thus g maps from u to a function which in turn maps from v to w
The above mathematical expression can also be represented as:
{g(u)}(v)=f(u, v)
Hence, curry(f) = g
Below are some examples in Java to demonstrate Function Currying:
Example 1: Adding 2 numbers using Function Currying
// Java Program to demonstrate Function Currying
import java.util.function.Function;
public class P_AI {
public static void main(String args[])
{
// Using Java 8 Functions
// to create lambda expressions for functions
// and with this, applying Function Currying
// Curried Function for Adding u & v
Function<Integer,
Function<Integer, Integer> >
curryAdder = u -> v -> u + v;
// Calling the curried functions
// Calling Curried Function for Adding u & v
System.out.println("Add 2, 3 :"
+ curryAdder
.apply(2)
.apply(3));
}
}
Output:
Add 2, 3 :5
Example 2: Multiplying 2 numbers using Function Currying
// Java Program to demonstrate Function Currying
import java.util.function.Function;
public class P_AI {
public static void main(String args[])
{
// Using Java 8 Functions
// to create lambda expressions for functions
// and with this, applying Function Currying
// Curried Function for Multiplying u & v
Function<Integer,
Function<Integer, Integer> >
curryMulti = u -> v -> u * v;
// Calling the curried functions
// Calling Curried Function for Multiplying u & v
System.out.println("Multiply 2, 3 :"
+ curryMulti
.apply(2)
.apply(3));
}
}
Output:
Multiply 2, 3 :6
Example 3: Adding 3 numbers using Function Currying
// Java Program to demonstrate Function Currying
import java.util.function.Function;
public class P_AI {
public static void main(String args[])
{
// Using Java 8 Functions
// to create lambda expressions for functions
// and with this, applying Function Currying
// Curried Function for Adding u, v & w
Function<Integer,
Function<Integer,
Function<Integer, Integer> > >
triadder = u -> w -> v -> u + w + v;
// Calling the curried functions
// Calling Curried Function for Adding u, v & w
System.out.println("Add 2, 3, 4 :"
+ triadder
.apply(2)
.apply(3)
.apply(4));
}
}
Output:
Add 2, 3, 4 :9