:: : 'a -> 'a list -> 'a list
函数用于在列表的开头添加元素,那么是否有函数可以将元素添加到末尾呢?如果没有,我猜List.rev (element::(List.rev list))
是最简单的方法?
谢谢!
let append_item lst a = lst @ [a]
list@[element]
应该能够正常工作。@
是连接列表的符号。
考虑到这个操作是线性的,您不应该在代码的“热”部分使用它,因为性能很重要。在冷却部分中,建议使用list @ [element]
,如Adi
所建议的那样。在热部分中,重写您的算法,以便您不需要执行该操作。
通常的做法是在处理期间按相反顺序累积结果,然后在返回结果之前将整个累积列表倒转。如果您有N个处理步骤(每个步骤向列表中添加一个元素),则可以将倒置的线性成本摊分在N个元素上,因此您可以保持线性算法而不是二次方算法。
在某些情况下,另一种有效的技术是按相反顺序处理元素,使得累积的结果无需显式地倒置即可呈现正确的顺序。