为什么这不会在球拍中生成矩阵?
Why does this not generate a matrix in racket?
我想在 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
导入的。
array
特殊形式定义了一种新语法,根据 docs 它期望“表达式的嵌套行”作为其参数,这与 vector
不同.例如:
(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
要求的特殊语法作为其参数。这不仅仅是删除引号和使用方括号的问题,它们是不同类型的对象,即使它们在打印时看起来很相似。
array
是一些我不明白的特殊魔法,但它的主体根本不是通用表达式。如果你想以编程方式创建一个数组,你需要像 build-array
或 vector*->array
:
这样的东西
(define nvs (for/vector ((x (range 4)))
(for/vector ((y (range 4)))
0)))
(define a (vector*->array nvs number?))
我想在 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
导入的。
array
特殊形式定义了一种新语法,根据 docs 它期望“表达式的嵌套行”作为其参数,这与 vector
不同.例如:
(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
要求的特殊语法作为其参数。这不仅仅是删除引号和使用方括号的问题,它们是不同类型的对象,即使它们在打印时看起来很相似。
array
是一些我不明白的特殊魔法,但它的主体根本不是通用表达式。如果你想以编程方式创建一个数组,你需要像 build-array
或 vector*->array
:
(define nvs (for/vector ((x (range 4)))
(for/vector ((y (range 4)))
0)))
(define a (vector*->array nvs number?))