matrix - Scheme Matrix-Operation Accumulate
问题描述
我正在尝试解决一些有关方案中矩阵运算的练习。因此我有一个程序累积:
(define (accumulate operation startvalue sequence)
(if (null? sequence)
startvalue
(operation (car sequence)
(accumulate operation startvalue (cdr sequence)))))
例如:
(define (dot-product u v)
(accumulate + 0 (map * u v)))
其中向量(或矩阵)被定义为列表(或列表的列表),例如
(define v (list 1 2)) ;or
(define m (list (list 3 4) (list 5 6)))
现在必须实现矩阵向量积。我应该得到这样的东西:
(define (matrix-vector-product m v)
(map + <?? v ??> m)
有人对我有提示吗?
同行
更新:我找到了一个计算矩阵向量积的解决方案。它并没有真正遵循模式(map <??> m)
,但至少它使用了已经存在的过程。
(define (matrix-vector-product v m)
(if (not (pair? m)) '()
(cons (dot-product v (car m)) (matrix-vector-product v (cdr m)))))
解决方案
我找到了一个解决方案 elseware,但我真的不明白它是如何工作的:
(define (matrix-vector-product m v)
(map (lambda (row) (dot-product v row)) m))
正如我所看到的,由 lambda 表达式描述的过程将高级过程 m 的第一个参数作为参数。显然不是整个序列,而是一个接一个地包含的对(行)。
为什么呢?
Map 需要一个过程和至少一个列表作为参数。
这里的过程是 lambda 表达式,它计算 m 和 v 的行之间的点积,列表是 m。
但是 m 和 v 的行之间的点积已经提供了解决方案,我没有看到到列表 m 的任何映射。
也许有人可以解决我的困惑。
推荐阅读
- r - 使用 rpart 时找不到“eval 中的错误(predvars,data,env):object `x` not found”的解决方案
- angular - 在 Angular 项目中使用 web api
- mysql - Mysql:如果条件没有给出浮点值的意外值
- reactjs - 两周后反应日期选择器禁用日期
- python - 从 sql 中查找表
- java - 有效证书上的 SSL 连接错误
- node.js - 如何使用 cors 模块修复此 cors 错误
- haskell - lambda 抽象之间有什么区别?
- python - 为什么内置 int_class 具有 'real'、'image'、'conj' 等属性?
- graphql - ApolloServer 2.0:游乐场设置 JSON 中的奇怪条目