(方案)如何在矩阵中添加元素?

时间:2013-04-26 20:51:12

标签: matrix scheme

该函数应该找到每一行的总和并将其放在一个列表中。我觉得这样的东西会起作用,但事实并非如此。它给了我一个奇怪的输出。

就像,如果我有一个包含两行和两列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)))))))

1 个答案:

答案 0 :(得分: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)))))