我有一个没有参数创建矩阵但没有返回任何内容的过程,我该如何访问矩阵?
这是我的代码:
(define matrix
(lambda (rows columns)
(do ((m (make-vector rows))
(i 0 (+ i 1)))
((= i rows) m)
(vector-set! m i (make-vector columns)))))
(define Mod-matrix!
(lambda (m i j)
(vector-ref (vector-ref m i) j)))
(define (board)
(mk-w (matrix 8 8) 0 0))
(define (mk-b b l c)
(cond ((and (< l 8) (< c 8)) (begin
(Mod-matrix! b l c p)
(mk-b b l (+ c 2))))
((and (>= c 8) (< l 8))(mk-b b (+ l 2) 0))
(else (mk-w b 0 1))))
(define (mk-b b l c)
(cond ((and (< l 8) (< c 8)) (begin
(Mod-matrix! b l c b)
(mk-w ti l (+ c 2))))
((and (>= c 8) (< l 8)) (mk-white b (+ l 2) 0))))
答案 0 :(得分:0)
如果要访问矩阵,请让函数返回矩阵而不是nil
或其他。它通常被认为是不好的形式,但你可以将set!
矩阵变为函数内部的一些变量。
如果无法更改功能,则无法访问矩阵。
答案 1 :(得分:0)
你的mk-w函数没有返回矩阵。请尝试以下方法:
(define (mk-w b l c)
(cond
((and (< l 8) (< c 8))
(begin (Mod-matrix! b l c)
(mk-w b l (+ c 2))
b))
((and (>= c 8) (< l 8))
(begin
(mk-w b (+ l 2) 0)
b))))
请注意,在每种情况下,begin块中的最后一个表达式是矩阵本身,这是因为begin块的返回值是最后一个表达式的值。在你的帖子中,那些最后的表达式返回了一个未定义的值。