这样的代码的确比较有趣

[ 838 查看 / 0 回复 ]

一个小问题作为示例:“求出a到b之间所有整数之和”。这很容易,您可以会这么做。

static int Sum(int a, int b)
{
    int sum = 0;
    for (int i = a; i <= b; i++) sum += i;
    return sum;
}

那么,“求出a到b之间所有整数的平方之和”或“绝对值之和”呢?当然,您可以再写两个方法。但是,从函数式编程角度来说,这完全是一个可以复用的逻辑:

static int Sum(Func<int, int> f, int a, int b)
{
    int sum = 0;
    for (int i = a; i <= b; i++) sum += f(i);
    return sum;
}

您可以将一个函数(在.NET里用委托表示)作为参数传入Sum方法,在调用时只需传入f的实现即可:

int i = Sum(x => x * x, 1, 3); // 14
int j = Sum(x => Math.Abs(x), -3, 3); // 12

http://blog.zhaojie.me/2009/07/recommended-reading-2-sicp.html
TOP