2014-11-03 64 views
2

什么是最干净的&在F#中创建这个“化合物”列表的最简单方法是什么?FSharp化合物列表

输入:

[ 1; 2; 3; 4; 5 ] 

所需的输出:

[ [1]; [1;2]; [1;2;3]; [1,2,3,4]; [1;2;3;4;5] ] 

回答

4

的方法有很多,但我认为这是一个干净的:

[1;2;3;4;5] 
    |> List.scan (fun x y -> x @ [y]) [] 
    |> List.tail 

使用List.scan最后List.tail省略第一个元素是一个空列表。

1

这里的另一种方式严格解释的内容作为整数和使用列表理解:

[1; 2; 3; 4; 5] |> List.map(fun n -> [ for i = 1 to n do yield i ]) 

,你会得到相同的输出上面,但如果你输入的是:

[2; 1; 2] |> List.map(fun n -> [ for i = 1 to n do yield i ]) 

你得到:

[[1; 2]; [1]; [1; 2]] 

这可能是也可能不是你想要的。