为什么将不可变列表实现为链表?

Why implement an immutable list as a linked-list?

根据 F# 的 list documentation:

为什么不在内存中连续实现它,因为它是不可变的,因此具有固定的大小?为什么要使用 F# list 而不是 F# array

它们有不同的用途,例如:

您在 F# 中使用数组来存储需要以相对较低的开销随机访问的大量数据。

当您需要在递归函数的迭代中积累一些东西时,F# 中的列表很有用。数组在这里表现不佳,因为它们的大小是固定的。

使用 list,您可以在 O(M) 时间内将 ListM(大小 M)的所有元素添加到 ListN(大小 N)中。同样,您可以在 O(1) 时间内将单个元素添加到任何列表中。