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