我想写一些可以复制列表中所有元素的东西.所以,如果我想要2个列表
[1; 2; 3; 4]
Run Code Online (Sandbox Code Playgroud)
它会成为
[1; 1; 2; 2; 3; 3; 4; 4]
Run Code Online (Sandbox Code Playgroud)
所以我打算用递归方式编写一个函数
let rec dupeElem row count =
match row with
| [] -> []
| hd::tl -> (makeCopy hd count) @ dupeElem tl count
Run Code Online (Sandbox Code Playgroud)
其中count是我想要的副本数.该函数将获取列表中的每个头元素并将其发送到复制功能,以使副本插入到列表中.然后makeCopy看起来像:
let makeCopy elem Count =
match Count with
| 0 -> []
| 1 -> elem
| 2 -> elem :: elem
|....
Run Code Online (Sandbox Code Playgroud)
但是当它返回dupeElem时我会收到错误.我知道做难事并不是最明智的想法,而是测试它是否可行.我将如何修复/改进我的工作?
只是为了非递归解决方案:
let xs = [1; 2; 3; 4; 5]
xs |> List.collect (fun x -> List.replicate 3 x)
//val it : int list = [1; 1; 1; 2; 2; 2; 3; 3; 3; 4; 4; 4; 5; 5; 5]
Run Code Online (Sandbox Code Playgroud)