该函数应该找到每一行的总和并将其放在一个列表中。我觉得这样的东西会起作用,但事实并非如此。它给了我一个奇怪的输出。
就像,如果我有一个包含两行和两列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 :(得分: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)))))