SML:如何在SML中将元素追加到列表?

Har*_*Har 2 sml

SML中是否有一个运算符,可让我在不创建新列表的情况下追加到列表?例如

我不能这样做:

 [1,2,3]::1
Run Code Online (Sandbox Code Playgroud)

但我可以这样做:

 [1,2,3]@[1]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我必须创建一个包含1的列表。有更好的方法吗?

sep*_*p2k 5

您必须使用任一方式创建一个列表。的尾部的尾巴的尾巴[1,2,3,1]IS [1]。因此,如果您有[1,2,3,1]内存,那么内存中也会有[1]某个地方。

因此,即使有like这样的运算符[1,2,3] @:: 1,也不会有什么区别,因为它仍然需要创建一个包含一个的列表。

PS:真正的问题xs @ [x]不是列表的创建,而是列表的运行时间在O(n)中(而不是x :: xs在O(1)中的事实)。这也是不可变单链列表本质上固有的问题,因此无法解决,但这就是为什么您通常应该避免在列表末尾附加这样的原因。