1

我正在尝试添加一个矩阵,但它不起作用......

(定义(矩阵-矩阵-加 ab)
  (map (lambda (row) (row-matrix-add row b))
       一个))

(定义(行矩阵相加行矩阵)
  (如果(空?(汽车矩阵))
      '()
      (缺点(添加-m 行(地图汽车矩阵))
            (行矩阵加行(映射 cdr 矩阵)))))

(定义(添加-m 行列)
  (如果(空?列)
      0
      (+ (车排)
         (车上校)
         (add-m (cdr row) (cdr col)))))
4

2 回答 2

4

这是非常简短的工作实现。Map 擅长摆脱一层递归,当你可以使用它时。

(define (matrix-add xy) (map (lambda (xy) (map + xy)) xy))

于 2011-02-28T04:00:10.980 回答
2

这是一个有效的实现:

(define (matrix-add m1 m2)

  (define (matrix-add-row r1 r2 res-row)
    (if (and (not (null? r1)) (not (null? r2)))
    (matrix-add-row (cdr r1) (cdr r2)
            (cons (+ (car r1) (car r2)) res-row))
    (reverse res-row)))

  (define (matrix-add-each m1 m2 res)
    (if (and (not (null? m1)) (not (null? m2)))
    (let ((res-row (matrix-add-row (car m1) (car m2) ())))
      (matrix-add-each (cdr m1) (cdr m2) (cons res-row res)))
    (reverse res)))
  (matrix-add-each m1 m2 ()))

示例用法和输出:

>  (matrix-add '((7 2) (3 8)) '((4 8) (0 5)))
((11 10) (3 13))
> (matrix-add '((5 2) (4 9) (10 -3)) '((-11 0) (7 1) (-6 -8)))
((-6 2) (11 10) (4 -11))
于 2010-03-04T04:03:39.223 回答