对于一个大学项目,我必须用相当大的语言制作一个基于矩阵的游戏,该矩阵被定义为多维向量。 我需要设置矩阵的单个元素,我的代码是:
(require racket/vector)
(define test (make-vector 4 (make-vector 4 0)))
(define (matrix-set matrix row column value)
(vector-set! (vector-ref matrix row) column value)
)
(display test)(newline)
(matrix-set test 0 0 1)
(display test)
并输出:
#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0))
#(#(1 0 0 0) #(1 0 0 0) #(1 0 0 0) #(1 0 0 0))
我搜索了 Racket 文档,只找到了通过创建新矩阵来设置元素的函数,this和 this还有问题。
为什么该函数设置整个列而不是仅设置元素?
可以采取什么措施来解决这个问题?
最佳答案
(make-vector 4 (make-vector 4 0))
等同于:
(let ((x (make-vector 4 0)))
(vector x x x x))
也就是说,(make-vector 4 0)
仅被调用一次,其值用于外部向量的所有 4 个槽。
您需要的是类似 (for/vector ((i 4)) (make-vector 4 0))
的东西,它将调用 (make-vector 4 0)
code> (并创建一个不同的向量)为外部向量的每个元素。
关于matrix - 在 Racket 中设置多维向量的各个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450148/