我试图以随机顺序将矢量中的元素插入到树中。我的逻辑是将向量副本的元素设置为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 '()))
顺便说一句,我知道这个程序没有实际用途,因为二进制搜索树的工作方式,它只是为了练习。
答案 0 :(得分:1)
vec1
别名为vec
,这就是更改一个内容影响另一个的原因。但是,如果您将最初的insert-h
来电更改为使用(insert-h (vector-copy vec) '())
,则会对两者进行处理,因为vec1
将成为新副本。