📜  用示例编写Java柯里化Currying函数

📅  最后修改于: 2020-03-18 13:13:27             🧑  作者: Mango

函数Currying是将具有多个参数的函数分解为具有单个参数的多个函数的概念,以使最终的输出相同。换句话说,它是一种将多值参数函数简化为单值参数多功能的技术。
考虑以下概念:

Currying将高阶函数分解为一系列较小的级联函数,这些函数采用一个参数并返回一个函数,最后一个级联函数除外,该函数返回所需的值。

例如:
设一个映射为
f:(u, v) -> w
用Currying的写法,以上函数会产生:
g:(u->(v->w))
因此g从映射u到这反过来从映射函数v到w。

上述数学表达式也可以被表示为:
{g(u)}(v)=f(u, v)
因此, curry(f) = g

以下是一些Java中的示例来演示函数Curinging:
示例1:使用函数Curinging加2个数字

// Java程序,展示Currying函数
import Java.util.function.Function;
public class GFG {
    public static void main(String args[])
    {

        Function >
            curryAdder = u -> v -> u + v;
        // 调用curried函数计算u+v
        System.out.println("Add 2, 3 :"
                           + curryAdder
                                 .apply(2)
                                 .apply(3));
        }
}

输出:

Add 2, 3 :5

示例2:使用函数库乘2个数字

// Java代码,展示Currying函数
import java.util.function.Function;
public class GFG {
    public static void main(String args[])
    {


        Function >
            curryMulti = u -> v -> u * v;
        // 调用curried函数计算u+v
        System.out.println("乘法结果 2, 3 :"
                           + curryMulti
                                 .apply(2)
                                 .apply(3));
    }
}

输出:

乘法结果 2, 3 :6

示例3:使用函数库运算来添加3个数字:

// Java代码,展示Currying函数
import Java.util.function.Function;
public class GFG {
    public static void main(String args[])
    {

        Function > >
            triadder = u -> w -> v -> u + w + v;
        // 调用curried函数计算u+v+w
        System.out.println("累加 2, 3, 4 :"
                           + triadder
                                 .apply(2)
                                 .apply(3)
                                 .apply(4));
    }
}

输出:

累加 2, 3, 4 :9