我的 Scheme 使用向量集实现有什么问题?
What is wrong with my Scheme using vector-set implementation?
我想知道我在这里使用矢量集做错了什么
(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)))
我正在尝试将向量的每个元素设置为除以范数(来自另一个谓词的整数)。
我不断收到的错误是
vector-set!: index is out of range
index: 1
valid range: [0, 0]
vector: '#(3/4)
所以我找到了第一个解决方案,但是,newvec
被重置为大小 1,因此索引超出了范围。
在你程序的第二行,你写(vector vec)
。这意味着什么?
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
可以更轻松地做到这一点
我想知道我在这里使用矢量集做错了什么
(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)))
我正在尝试将向量的每个元素设置为除以范数(来自另一个谓词的整数)。
我不断收到的错误是
vector-set!: index is out of range
index: 1
valid range: [0, 0]
vector: '#(3/4)
所以我找到了第一个解决方案,但是,newvec
被重置为大小 1,因此索引超出了范围。
在你程序的第二行,你写(vector vec)
。这意味着什么?
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