使用C#体验函数式编程之——Currying(柯里化)

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C#体验函数式编程之——Currying(柯里化)相关的知识,希望对你有一定的参考价值。

前言

上次,我们尝试了函数式编程中的Partial application(局部应用)

Partial Application是函数式编程中一个很常见的模式,它通过固定一个函数的部分参数,产生一个参数较少的函数。

今天,我们再来体验函数式编程另外一种模式,Currying(柯里化)。

Currying

Currying是将具有多个参数的函数拆分为一个参数函数的嵌套链的过程。因此,柯里化函数是一个函数,它一次接受一个参数,在每一步都返回一个新函数。

例如有一个函数f(a, b, c), 我们可以传入参数a生成函数f_a,再传入参数b生成函数f_ab,最后传入参数c执行函数。

调用同一个函数,并且传递的参数绝大多数都是相同的,那么使用Currying处理过的函数,则是一个很好的选择。

那么,用C#怎么实现呢?

Demo

和上次一样,我们引用nuget包Curryfy

通过将Curry扩展方法用于Func委托实现Currying。示例代码如下:

using static Curryfy.CurryExtensions;

Func<int, int, int, int> add = (a, b, c) => a + b + c;

var addCurried = add.Curry();

var add1 = addCurried(1);
var add4 = add1(3);
var result = add4(5);

Console.WriteLine(result);
//9

结论

Partial application和Currying的功能感觉有点相似,但是使用场景不同:

  • Partial application 主要用于减少参数输入,实现默认参数

  • Currying 主要用于函数组合,每次只接受一个参数,实现f(g(x))的效果

以上是关于使用C#体验函数式编程之——Currying(柯里化)的主要内容,如果未能解决你的问题,请参考以下文章

java8入门必备—函数式编程思维——函数式语言向语言和运行时让渡控制权的途径——柯里化和函数的部分施用

函数式编程之一柯里化

js - 函数的柯里化(Currying)

js - 函数的柯里化(Currying)

Swift 柯里化

JS中的柯里化(currying)