C# 这个C代码是如何在函数式语言(F?Haskel)中实现的

C# 这个C代码是如何在函数式语言(F?Haskel)中实现的,c#,functional-programming,c#-to-f#,C#,Functional Programming,C# To F#,我怎样才能用F#或Haskel或类似的函数式语言编写这个C#代码 var lines = File.ReadAllLines(@"\\ad1\\Users\aanodide\Desktop\APIUserGuide.txt"); // XSDs are lines 375-471 var slice = lines.Skip(374).Take(471-375+1); var kvp = new List<KeyValuePair<string, List<string&g

我怎样才能用F#或Haskel或类似的函数式语言编写这个C#代码

var lines = File.ReadAllLines(@"\\ad1\\Users\aanodide\Desktop\APIUserGuide.txt");

// XSDs are lines 375-471
var slice = lines.Skip(374).Take(471-375+1);

var kvp = new List<KeyValuePair<string, List<string>>>(); 
slice.Aggregate(kvp, (seed, line) => 
{
    if(line.StartsWith("https"))
        kvp.Last().Value.Add(line);
    else
        kvp.Add(
            new KeyValuePair<string,List<string>>(
                line, new List<string>()
            )
        );
    }
    return kvp;
});
var lines=File.ReadAllLines(@“\\ad1\\Users\aanodide\Desktop\APIUserGuide.txt”);
//XSD是第375-471行
var切片=行。跳过(374)。取(471-375+1);
var kvp=新列表();
切片.聚合(kvp,(种子,线)=>
{
if(行开始使用(“https”))
kvp.Last().Value.Add(行);
其他的
kvp.Add(
新的KeyValuePair(
行,新列表()
)
);
}
返回kvp;
});

因此,如果我正确阅读了您的代码,您的输入如下所示:

[...]
Foo
https://example1.com
https://example2.com
Bar
https://example3.com
Baz
Xyzzy
https://example4.com
[...]
因此,您希望标题与下面的URL分组。这里有一个Haskell程序可以实现这一点:

导入数据列表(isPrefixOf)
groupURL::[String]->[(String,[String])]
groupUrls[]=[]
groupUrls(标题:其他)=(标题,URL):剩余的groupUrls
其中(URL,剩余)=span(isPrefixOf“https”)其他
main=do

输入实际上,这是真正的功能就像。。。没有(可见)循环,只有函数…MSDN文档中有关于…@digEmAll的信息:不过它是在改变对象。(
.Add()
)@recursive:是的,没错