如何在列表中向上移动项目。
输入列表如下所示:let list = [1;2;3;4;5]
输出列表将类似于以下内容之一:
[1;2;3;5;4]
.......>
[2;1;3;4;5]
...>......
情节扭曲:我希望能够向上移动列表中的任何索引
据我了解,这不是您打算使用 F# 或函数式语言做的事情,但它是我的程序中必须具备的。
我相信这可以使用递归和高阶(HO)函数来完成,但由于我对 HO 的了解非常有限,我尝试使用递归来解决这个问题。
我在列表中向下移动项目的方法包括使用索引和列表作为参数的简单递归,如下所示:
let rec moveDownAt index list =
match index, list with
| -1, _ -> list
| 0, h1::h2::t -> h2::h1::t
| index, h::t -> h::moveDownAt (index - 1) t
| _, [] -> list
但是,要朝另一个方向移动,我需要引用之前的“头”,并且我认为我在第三条匹配线上会遇到问题| index, h::t -> h::moveDownAt (index - 1) t
我执行 h::的地方,因为我将头添加到列表中(如果我添加该参数,这将是下一个调用的前一个) )。
最佳答案
在两个元素上交换位置意味着一个元素向上移动,一个元素向下移动。
简单使用以下代码即可解决问题:
let moveUpAt index list = moveDownAt (index-1) list
这将取代索引,使“要向下移动的索引”变成“要向上移动的索引”。
关于list - 在列表中向上移动项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093465/