FSharp化合物清单

时间:2014-11-03 20:15:26

标签: f#

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

输入:

[ 1; 2; 3; 4; 5 ]

期望的输出:

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

这是另一种将内容严格解释为int并使用列表理解的方式:

[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]]

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