将元素向前移动列表(SML)



是否可以在sml中向前移动元素,假设两个步骤,以便 [1,2,3,4,5,6]中的3个步骤像 [1,2,4,5,3,6]

基本上,您将需要定义一个有用的功能,该功能返回要更改的元素的确切位置。假设您在列表中只有3个,那么您将拥有这样的东西。如果您想向前移动所有3s,只需将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个的确切位置,您需要做的就是使用list.take()和list.drop()的组合,它很容易获得所需的输出。<<<<<<<<<</p>

此方法不限于您要更改哪个元素,列表长度也不限制。

最新更新