Random 将向量的元素以随机顺序插入到树中

Random 将向量的元素以随机顺序插入到树中,random,vector,scheme,Random,Vector,Scheme,我试图将向量中的元素以随机顺序插入到树中。我的逻辑是将向量副本的元素设置为false,然后每次检查该向量以查看是否所有元素都为false。否则,继续循环,直到向量中的所有元素都已插入。我的问题是,当我使用“vector set!”时,它会同时更改“vec”和“vec1”的值。为什么会这样 (define (vector-check vec) (define (vector-check-h i) (if (= i (vector-length vec)) #t (if

我试图将向量中的元素以随机顺序插入到树中。我的逻辑是将向量副本的元素设置为false,然后每次检查该向量以查看是否所有元素都为false。否则,继续循环,直到向量中的所有元素都已插入。我的问题是,当我使用“vector set!”时,它会同时更改“vec”和“vec1”的值。为什么会这样

(define (vector-check vec)
(define (vector-check-h i)
  (if (= i (vector-length vec)) 
      #t
      (if (eq? (vector-ref vec i) #f)
          (vector-check-h (+ i 1))
          #f)
      ))
(vector-check-h 0))

(define (insert-r vec)
  (define (insert-h vec1 T)
  (let ((r (random (vector-length vec))))
  (cond ((eq? (vector-check vec1) #t) T)
        ((eq? (vector-ref vec1 r) #f)
         (insert-h vec1 T))
        (else 
         (begin
         (vector-set! vec1 r #f)
         (insert-h vec1 (insert (vector-ref vec r) T))
         )))))
(insert-h vec '()))

顺便说一句,我知道这个程序没有实际用途,因为二进制搜索树的工作方式,它只是为了实践

vec1
被别名为
vec
,这就是为什么更改一个内容会影响另一个内容的原因。但是如果您将初始的
insert-h
调用改为使用
(insert-h(vector copy vec)')
,它将处理这两个,因为
vec1
将是一个新的副本