我有一个没有参数的过程创建一个矩阵,但什么都不返回,我怎样才能访问矩阵?

时间:2010-12-30 17:02:05

标签: scheme

我有一个没有参数创建矩阵但没有返回任何内容的过程,我该如何访问矩阵?

这是我的代码:

(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))))

2 个答案:

答案 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块的返回值是最后一个表达式的值。在你的帖子中,那些最后的表达式返回了一个未定义的值。