Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在列表中向前移动元素(SML)_List_Sml - Fatal编程技术网

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

List 在列表中向前移动元素(SML),list,sml,List,Sml,是否可以在SML中将列表中的一个元素向前移动,比如说两个步骤,这样[1,2,3,4,5,6]中的3就像[1,2,4,5,3,6]一样结束?基本上,您需要定义一个有用的函数,返回要更改的元素的确切位置。在这个例子中,假设列表中只有一个3,你会得到这样的结果。如果您想将所有3向前移动,只需将当前(位置)列为一个列表: 现在您已经获得了要向前移动的3的确切位置curr,您所需要做的就是使用List.take()和List.drop()的组合,这对于获得所需的输出来说很简单 此方法不受要更改的元素的限制

是否可以在SML中将列表中的一个元素向前移动,比如说两个步骤,这样
[1,2,3,4,5,6]
中的3就像
[1,2,4,5,3,6]
一样结束?

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

现在您已经获得了要向前移动的3的确切位置curr,您所需要做的就是使用List.take()和List.drop()的组合,这对于获得所需的输出来说很简单


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

查看
list.Take()
list.drop()
@AlexandruBarbarosie是的,我考虑过了,但是有没有办法让某个元素向前跳两步?当你点击列表中的3时,无论它在列表中的什么位置(位置未知),它都会向前跳。我不这么认为,SML中的变量是不可变的,除非声明为引用,但我无法判断数组的引用变量的属性(如果有)。你必须“移动”不仅是
3
,还有
4
5
,这样您的内存中就有了一个连续的数据块。所以,是的,最好的性能将是
O(n)
。我明白了,我想我是在试图解决“错误”的问题。谢谢你的提示!
exception DoesntExit 
fun look3 (li, curr) = if (hd(li) == 3) then curr else look3 (tl(li), curr + 1)
  | look3 (nil, curr) = raise DoesntExit