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

Matrix (方案)如何在矩阵中添加元素?,matrix,scheme,Matrix,Scheme,此函数用于查找每行的总和并将其放入列表中。我原以为这样做行得通,但事实并非如此。它给了我一个奇怪的输出 比如,如果我有一个矩阵,它有两行两列1,它会返回: (2 . 1) 与此相反: (2 2) 帮忙 您应该调用(循环(+r1)0)而不是调用(add1r)。注:此建议正确;然而,您的代码中可能还有其他错误,特别是使用matrix ref调用进行的计算看起来不会累加一行。通过使用两行以上的矩阵进行测试,可以看出这一点 这里有一个修正: (define (sum mat) (let loop

此函数用于查找每行的总和并将其放入列表中。我原以为这样做行得通,但事实并非如此。它给了我一个奇怪的输出

比如,如果我有一个矩阵,它有两行两列1,它会返回:

(2 . 1)
与此相反:

(2 2)
帮忙

您应该调用
(循环(+r1)0)而不是调用
(add1r)
。注:此建议正确;然而,您的代码中可能还有其他错误,特别是使用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)))))
(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)))))