我想知道我在这里使用vector-set
做错了什么(define foo0
(lambda (vec)
(let* ((newvec (vector vec))
(l (vector-length vec))
(norm (norm0 vec)))
(do ((i 0(+ i 1)))
((= i l))
(vector-set*! newvec i (/(vector-ref vec i) norm))) newvec)))
我试图将向量的每个元素设置为norm(来自另一个谓词的整数)。
我一直得到的错误是
vector-set!: index is out of range
index: 1
valid range: [0, 0]
vector: '#(3/4)
所以我找到第一个解决方案,然而,newvec
被重置为大小1,因此索引超出范围。
答案 0 :(得分:1)
在程序的第二行,您编写(vector vec)
。这评价的是什么?
答案 1 :(得分:1)
vector
使用作为参数给出的元素创建一个可变向量,因此:
(vector 4) ; a vector of one element
(vector 1 2 3) ; a vector of 3 elements
假设你需要一个20元素的向量,你将要改变它并使用它。使用vector
是不可能的,因为那时你必须有20个伪参数。相反,你使用make-vector
它需要两个参数,大小和所有元素的可选初始值:
(make-vector 20 0)
; ==> #(0 0 ... 0), a vector of 20 elements, all 0
现在知道您可以使用vector-length
获取传递的向量的长度,您可以将其传递给make-vector
以制作相同大小的向量,您可以将值复制到一个浅的副本。但是,使用vector-copy