在列表中向前移动元素(SML)

时间:2014-02-06 11:56:16

标签: list sml

是否可以在SML中向前移动列表中的元素,让我们说两个步骤,以便[1,2,3,4,5,6]中的3最终像[1,2,4,5,3,6]一样?

1 个答案:

答案 0 :(得分:0)

基本上,您需要定义一个有用的函数,该函数返回您想要更改的元素的确切位置。在这里你将有这样的东西,假设你在列表中只有一个3。如果你想向前移动所有3个,只需将curr(位置)设为一个列表:

exception DoesntExit 
fun look3 (li, curr) = if (hd(li) == 3) then curr else look3 (tl(li), curr + 1)
  | look3 (nil, curr) = raise DoesntExit    

现在你有了你要前进的3的确切位置curr,你需要做的就是使用List.take()和List.drop()的组合,这对于你想要的输出是微不足道的。< / p>

此方法不限于您要更改的元素,列表长度和列表类型。