我想在 Racket 中生成一个矩阵(可能使用进程中的数字,使用0
进行简化,如下所示)。我试过了
(array (for/vector ((x (range 4)))
(for/vector ((y (range 4)))
0)))
这给出了
(array '#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0)))
虽然够傻的,
(matrix? (array (for/vector ((x (range 4)))
(for/vector ((y (range 4)))
0))))
给出#f
,(array '#(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0)))
。然而
> (matrix? (array #(#(0 0 0 0) #(0 0 0 0) #(0 0 0 0) #(0 0 0 0))))
#t
那么这是怎么回事呢?
编辑:矩阵模块是从 math/array
和 math/matrix
导入的。
最佳答案
根据 docs,array
特殊形式定义了新语法。它期望“表达式的嵌套行”作为其参数,这与向量
不同。例如:
(require math/array)
(require math/matrix)
(array #[#[1]])
=> (array #[#[1]])
(matrix? (array #[#[1]]))
=> #t
(array (vector (vector 1)))
; notice the difference, there's a quote and the brackets are not square
=> (array '#(#(1)))
(matrix? (array (vector (vector 1))))
=> #f
总结一下:您不能使用向量的向量来替代 array
作为其参数所需的特殊语法。这不仅仅是删除引号和使用方括号的问题,它们是不同类型的对象,尽管它们在打印时看起来很相似。
关于matrix - 为什么这不会在 Racket 中生成矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66747017/