List F#-从整数输入生成元组列表

List F#-从整数输入生成元组列表,list,f#,tuples,collect,List,F#,Tuples,Collect,我应该从整数输入返回一个元组列表。 例如: 输出'4应返回元组列表: [(1, 1); (2, 1); (2, 2); (3, 1); (3, 2); (3, 3); (4, 1); (4, 2); (4, 3); (4, 4)] 目前我正在 [(1, 1); (1, 2); (1, 3); (1, 4); (2, 1); (2, 2); (2, 3); (2, 4); (3, 1);(3, 2); (3, 3); (3, 4); (4, 1); (4, 2); (4, 3); (4,

我应该从整数输入返回一个元组列表。 例如: 输出'4应返回元组列表:

[(1, 1);
(2, 1); (2, 2);
(3, 1); (3, 2); (3, 3);
(4, 1); (4, 2); (4, 3); (4, 4)]
目前我正在

 [(1, 1); (1, 2); (1, 3); (1, 4);
 (2, 1); (2, 2); (2, 3); (2, 4);
 (3, 1);(3, 2); (3, 3); (3, 4);
 (4, 1); (4, 2); (4, 3); (4, 4)]
到目前为止,我所拥有的:

let output' x =
    let ls= [1..x]
    ls |> List.collect (fun x ->[for i in ls -> x,i])    
output' 4
我不知道如何获得所需的输出。任何帮助都将不胜感激

您可以添加一个过滤器:

...
|> List.filter (fun (a, b) -> a >= b)`

在F#中,它们主要处理序列,因此这里有一个序列驱动的惰性解决方案:

let output' max =
    let getTuples x = 
        seq { 1 .. x }
        |> Seq.map (fun y -> (x, y))

    seq { 1 .. max }
    |> Seq.map getTuples
如果需要列表,请将
seq{1..x}
替换为
[1..x]
。 它仍然比循环更实用

let output' max =
    let getTuples x = 
        seq { 1 .. x }
        |> Seq.map (fun y -> (x, y))

    seq { 1 .. max }
    |> Seq.map getTuples