2013-04-26 3 views
0

Эта функция должна найти сумму каждой строки и поместить ее в список. Я думал, что-то вроде этого будет работать, но это не так. Это дает мне странный результат.(схема) Как добавить элементы в матрицу?

Мол, если у меня есть матрица, которая имеет две строки и два столбца 1, он возвращает это:

(2 . 1) 

Вместо этого:

(2 2) 

Помощь?

(define (sum mat) 
    (let loop ([r 0] 
     [c 0]) 
    (if (> r (matrix-rows mat)) '() 
     (if (>= c (sub1 (matrix-cols mat))) (add1 r) 
     (cons (+ (matrix-ref mat r c) (matrix-ref mat r (add1 c))) (loop r (add1 c))))))) 

ответ

0

Вместо вызова (add1 r) вы должны позвонить (loop (+ r 1) 0). Примечание: это предложение верно; однако в вашем коде могут появиться другие ошибки, в частности, ваши вычисления с вызовами matrix-ref не выглядят так, как будто они будут содержать строку. Это можно увидеть, проверив матрицу из более чем двух строк.

Вот исправление:

(define (sum mat) 
    (let loop ((r 0) (c 0) (s 0) (a '()) ;; row, col, sum, ans 
    (cond ((>= r (matrix-rows mat)) (reverse a)) 
      ((>= c (matrix-cols mat)) (loop (+ r 1) 0 0 (cons s a))) 
      (else (loop r (+ c 1) (+ s (matrix-ref mat r c)) a))))) 
Смежные вопросы