Swift 中的 "cons" 运算符/函数/方法在哪里?

Where is the "cons" operator / function / method in Swift?

许多函数式语言都有 cons operator。它 returns 不可变列表或类似数组的结果,在恒定时间内附加到末尾的新元素。

作为伪代码示例,[1,2] : 3 的计算结果为 [1,2,3]

Swift 有 append 可以在摊销常数时间内向 Array 添加一个元素(有一些注意事项)。但是,append 需要一个可变的 Array。我可以从一个不可变的 Array 创建一个可变的 Array,然后 append,但我很惊讶似乎没有一个现有的函数或运算符可以为我做这件事并提供摊销常数时间保证(未共享的地方)。

这不是 cons 运算符本身,但您可以使用数组的 + 运算符将数组追加或添加到 "constructor style" 中的可变或不可变数组中;用连接的结果构造一个新数组。

来自the Swift Language Guide - Collection Types

Creating an Array by Adding Two Arrays Together

You can create a new array by adding together two existing arrays with compatible types with the addition operator (+). The new array’s type is inferred from the type of the two arrays you add together:

...

let foo = [1, 2]
let bar = foo + [3]    // [1, 2, 3], "cons(foo, 3)"
let baz = [-1, 0] + bar // [-1, 0, 1, 2, 3], "cons([-1, 0], bar)"

但是请注意,这不会 运行 在摊销常数时间内,因为我们需要分配新内存并将结果 复制 到其中。但是,由于数组是 Swift 中的值类型,我看不出对不可变数组的任何操作——比如我们创建一个新的不可变数组——将如何在常数时间内 运行,因为我们总是需要为此进行复制(即使有时可能会懒惰地执行)。

因此,上面的性能应该与在现有可变数组上使用 .append/.appendContentsOf 构造 new 数组没有区别 接着复制;前一步 运行ning 在摊销常数时间内(由于数组的预分配呈指数增长 space),但后一步 运行ning 在线性时间内