У меня есть процедура без аргументов, которая создает матрицу, но ничего не возвращает, как я могу получить доступ к матрице? - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть процедура без аргументов, которая создает матрицу, но ничего не возвращает, как я могу получить доступ к матрице?

Это мой код:

(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 голосов
/ 30 декабря 2010

Ваша функция 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))))

Обратите внимание, что в каждом случае последнее выражение в начальном блоке является самой матрицей, это потому, что возвращаемое значение начального блока является значением последнего выражения. В вашем сообщении эти последние выражения вернули неопределенное значение.

0 голосов
/ 30 декабря 2010

Если вы хотите получить доступ к матрице, пусть функция возвращает матрицу, а не nil или что-то еще. Обычно это считается дурным тоном, но вы можете set! преобразовать матрицу в некоторую переменную внутри функции.

Если вы не можете изменить функцию, вы не можете получить доступ к матрице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...