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

时间:2013-12-05 15:35:09

标签: random vector scheme

我试图以随机顺序将矢量中的元素插入到树中。我的逻辑是将向量副本的元素设置为false,然后每次检查此向量以查看是否所有元素都为false。否则,继续循环,直到插入了向量中的所有元素。我的问题是,当我使用“矢量集!”它改变了“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 '()))

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

1 个答案:

答案 0 :(得分:1)

vec1别名为vec,这就是更改一个内容影响另一个的原因。但是,如果您将最初的insert-h来电更改为使用(insert-h (vector-copy vec) '()),则会对两者进行处理,因为vec1将成为新副本。