更新不可变向量的元素 - vector-set

Update element of immutable vector - vector-set

我正在使用向量构建一个 table 来实现动态程序,它涉及按顺序更新向量的每个元素。但是为什么 immutable 向量没有 vector-set 呢? mutable 向量只有 vector-set!,但是我们可以看到 immutable 和 mutable 字典有 dict-setdict-set! ,还有 hash-sethash-set! 用于 immutable 和 mutable 哈希 tables.

之所以缺少vector-set,是为了防止人们无意中使用它而没有意识到操作是O(n)而不是O(1)。因为 vector-set!O(1) 所以有人犯这个错误的可能性不大。

另外写一个vector-set很简单,真正需要的时候:

#lang racket

(define (vector-set v i o)
  (vector->immutable-vector
   (for/vector ([j (in-range (vector-length v))])
     (if (= i j)
         o
         (vector-ref v j)))))

(vector-set (vector-immutable 10 11 12 13) 2 'a)

输出:

'#(10 11 a 13)