List comprehensions与C#中的LINQ

上篇blog用Prolog和Erlang的List comprehensions分别解决N queens问题,其中看出了List comprehensions的强大。

List comprehensions一般只有在函数式语言FP中才有,如Erlang和Haskell,那么在静态类型OO语言中存在不?如Java和C#?,很遗憾,Java中没有,而且实现起来比较繁琐,C#中则有这个List comprehensions,不过C#改了名字,叫做LINQ(Language-Integrated Query),看看下面的C#代码:

 

class LINQQueryExpressions
{
    static void Main()
    {

        // Specify the data source.
        int[] scores = new int[] { 97, 92, 81, 60 };

        // Define the query expression.
        IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            select score;

        // Execute the query.
        foreach (int i in scoreQuery)
        {
            Console.Write(i + " ");
        }            
    }
}
// Output: 97 92 81

 我猜LINQ的设计者一定熟知FP的List comprehensions,不过从List comprehensions的角度看LINQ,LINQ还是显得繁琐,看看List comprehensions的表示吧:

 

[X || X <- [97, 92, 81, 60], X > 80].

 其实smalltalk解决这种问题也简单,用个block就可以了。

 

Java 8中加了lambda或许解决上面问题比现在优雅很多。

 

你可能感兴趣的:(LINQ)