【问题标题】:Matrix addition in SchemeScheme中的矩阵加法
【发布时间】:2011-01-23 01:37:55
【问题描述】:

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

(定义(矩阵-矩阵-添加 a b) (map (lambda (row) (row-matrix-add row b)) 一种)) (定义(行矩阵相加行矩阵) (如果(空?(汽车矩阵)) '() (缺点(添加-m 行(地图汽车矩阵)) (行矩阵加行(映射 cdr 矩阵))))) (定义(添加-m 行列) (如果(空?列) 0 (+ (车排) (车上校) (add-m (cdr row) (cdr col)))))

【问题讨论】:

  • 什么不起作用?你有错误吗?
  • 它没有做它应该做的事情。基本上添加是错误的。刚开始的计划

标签: matrix scheme racket


【解决方案1】:

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

(define (matrix-add x y) (map (lambda (x y) (map + x y)) x y))

【讨论】:

    【解决方案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))
    

    【讨论】:

    • 这个解决方案太可怕了。比实际情况复杂得多。
    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2016-08-03
    • 1970-01-01
    • 2011-03-17
    • 2020-08-30
    • 1970-01-01
    相关资源
    最近更新 更多