Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 学习Haskell:C语言中的列表理解_C#_Linq_Haskell - Fatal编程技术网

C# 学习Haskell:C语言中的列表理解

C# 学习Haskell:C语言中的列表理解,c#,linq,haskell,C#,Linq,Haskell,以下代码在Haskell中。如何用C编写类似的函数 squareArea xs = [pi * r^2 | r <- xs] 只是想澄清一下。。。上面的代码是一个函数,它接受一个包含圆半径的列表作为输入。表达式计算输入列表中每个圆的面积 我知道在C语言中,我可以通过循环一个列表,计算列表中每个圆的面积,并返回一个包含圆面积的列表,从而获得相同的结果。我的问题是。。。上面的代码是否可以用类似的方式用C编写,或者使用lambda表达式或LINQ xs.Select(r => 2 * M

以下代码在Haskell中。如何用C编写类似的函数

squareArea xs = [pi * r^2 | r <- xs]
只是想澄清一下。。。上面的代码是一个函数,它接受一个包含圆半径的列表作为输入。表达式计算输入列表中每个圆的面积

我知道在C语言中,我可以通过循环一个列表,计算列表中每个圆的面积,并返回一个包含圆面积的列表,从而获得相同的结果。我的问题是。。。上面的代码是否可以用类似的方式用C编写,或者使用lambda表达式或LINQ

xs.Select(r => 2 * Math.PI * r * r)
是右手边,我想在我的浏览器里写代码,而不是编译

一般来说,Haskell列表是对表单的理解

[e | x1 <- x1s, x2 <- x2s, p]

或者别的什么。该死,我现在没时间修复,请其他人使用标记的社区Wiki。

使用:


dtb可能是迄今为止最好的版本,但如果您进一步将其放在一个静态类中,并添加如下所示的this运算符,则可以调用这些方法,就像它们是列表的一部分一样:

public static class MyMathFunctions
{
    IEnumerable<double> SquareArea(this IEnumerable<int> xs)
    {
        return from r in xs select 2 * Math.PI * r * r;
    }

    IEnumerable<double> SquareAreaWithLambda(this IEnumerable<int> xs)
    {
        return xs.Select(r => 2 * Math.PI * r * r);
    }

}
然后可以这样执行:

var myList = new List<int> { 1,2,3,4,5 };

var mySquareArea = myList.SquareArea();

你们的平方面积法是一样的吗?我的眼睛看不出区别:是的,我的意思是在xs中包含:from r select 2*Math.PI*r*r;在第一种方法中,我编辑了我的帖子来反映它。等等,你有一个以大写字母开头的函数吗?这是违法的?为什么用2*pir计算面积?pir^2或pi*r**2不是一种方法吗?2*pi*r将计算圆的周长,而不是面积。不使用Lambda表达式不是更简单吗?平方面积xs=map 2*pi*xsSure。你甚至可以把它缩短为squareArea=map2*pi*,但这已经不太接近C了。
IEnumerable<double> SquareArea(IEnumerable<int> xs)
{
    return from r in xs select Math.PI * r * r;
}
IEnumerable<double> SquareArea(IEnumerable<int> xs)
{
    return xs.Select(r => Math.PI * r * r);
}
squareArea xs = map (\r -> pi * r * r) xs
public static class MyMathFunctions
{
    IEnumerable<double> SquareArea(this IEnumerable<int> xs)
    {
        return from r in xs select 2 * Math.PI * r * r;
    }

    IEnumerable<double> SquareAreaWithLambda(this IEnumerable<int> xs)
    {
        return xs.Select(r => 2 * Math.PI * r * r);
    }

}
var myList = new List<int> { 1,2,3,4,5 };

var mySquareArea = myList.SquareArea();
Func<IEnumerable<Double>, IEnumerable<Double>> 
   squareArea =  xs => xs.Select(r => Math.PI*r*r);