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

时间:2018-10-28 12:58:12

标签: 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)]

到目前为止我所拥有的:

let output' x =
    let ls= [1..x]
    ls |> List.collect (fun x ->[for i in ls -> x,i])    
output' 4

我不知道如何获得所需的输出。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以添加一个过滤器:

<!DOCTYPE html>
 <html lang="nl">
   <head>
    <meta charset="utf-8" />
    <title>Lab 10</title>
    <script src="lab10script.js"></script>
   </head>
   <body>
    <form name="form">
    <input type="text" name="bedrag" id="bedrag" placeholder="Vul bedrag in" />
    <select id="list">
        <option>dollar/euro</option>
        <option>euro/dollar</option>
        <option>ruble/euro</option>
        <option>euro/ruble</option>
    </select>
    <button type="button" onclick="myFunction()">Exchange</button>
   </form>
  </body>
</html>

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

答案 1 :(得分:0)

在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 ]。 它仍然比循环更具功能性。