【SICP练习】66 练习2.37



练习2.37

这道题花了我太长的时间了,一开始我就把题目中的m看成了w。然后题中给出的dot-product的两个参数我还以为一个是向量另一个是矩阵。怎么算都算不出来,直到看到“返回求和...”里的w只有一个i而没有j。好了,那么开始按照题目的要求来做题了。

既然发现了自己的错误,那么就知道了dot-product是干嘛的了,它可以用来求一个矩阵中的一列和一个向量的积。因此定义出matrix-*-vector就不难了。

(define (matrix-*-vector m v)

(map (lambda (col)

(dot-product col v))

m))

下面就来用题目中的数据来测试一下。

(matrix-*-vector ‘( (1 2 3 4) (4 5 6 6)(6 7 8 9) ) )

;Value: (30 56 80)

接下来我们来看看transpose,之所以把matrix-*-matrix放在最后是因为其的定义中需要transpose。

(define (transpose mat)

(accumulate-n cons ‘() mat))

看似这么一行代码,但其功能可强大了。

(transpose ‘((1 2 3 4) (4 5 6 6) (6 7 89)))

;Value: ((1 4 6) (2 5 7) (3 6 8) (4 69))

如果这里accumulate的变化有什么不明白的,可以回过头看看练习2.33的解答中的截图。而accumulate-n只不过是个accumulate的外壳而已,在变换中accumulate-n都将会慢慢变成accumulate。

在线性代数里我们学过,两个矩阵的乘积mn的第一列第一行的值等于m的第一列和n的第一行的点积,mn的第一列第二行的值等于m的第一列和n的第二行的点积……

(define (matrix-*-matrix m n)

(let ((cols (transpose n)))

(map (lambda (col-of-m)

(matrix-*-vector colscol-of-m))

m)))

时间: 2024-10-23 17:40:49

【SICP练习】66 练习2.37的相关文章

Python高级编程之生成器(Generator)与coroutine(一):Generator

这是一系列的文章,会从基础开始一步步的介绍Python中的Generator以及coroutine(协程)(主要是介绍coroutine),并且详细的讲述了Python中coroutine的各种高级用法,最后会用coroutine实现一个简单的多任务的操作系统. 其实也是看完这篇文章的学习笔记吧!O(∩_∩)O 生成器(Generator) 什么是生成器?在Python中,生成器(Generator)是一个带有yield关键字的函数 1 def gene(): 2 a = 1 3 print "

了发看见了看见老师发的了就是的立刻就看历史的理解力

http://www.qzone.cc/wangming/bename/%E7%94%98%E5%AD%9C%28%E5%BA%B7%E5%AE%9A%29%E6%89%BE%E5%B0%8F%E5%A6%B9%E4%B8%8A%E9%97%A8%E7%94%B5%E8%AF%9D%E2%96%93%E9%AA%9A%E5%A5%B3%E2%96%93%54%45%4C%5F%E3%80%90%31%38%36%66%31%30%37%31%66%38%32%32%34%E3%80%91%E9%

ifconfig6.efi

1 ifconfig6 -? 2 Displays or modifies IPv6 configuration for network interface. 3 4 IfConfig6 -r [Name] | -l [Name] 5 IfConfig6 -s <Name> [dad <Num>] [auto | [man [id <mac>] [host <IPv6> gw <IPv6>] 6 [dns <IPv6>]]] 7 8

X.509 数字证书结构和实例

http://www.cppblog.com/sleepwom/archive/2010/07/08/119746.html 一. X.509数字证书的编码 X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN1语法进行编码. ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成: 1.数据块数据类型标识(一个字节) 数据类型包括简单类型和结构类型. 简单类型是不能再分解类型,如整型(INTERGER).比

H.264 数据示例

最近项目需要在研究视频实时监控功能. 第一个需要了解的就是 H.264 格式,先以 H.264 文件为例进行数据分析. 在网上下载了 foreman.264 文件,进行了帧类型的分析和帧数据的分析.然后对比实际项目视频的需要,大概分析了一下数据传输的可能性. 代码后续再上传吧,呵呵... // 分辨率为: 176 * 144 - foreman.264 FrameInfo // 实际多媒体录制为: 352 * 288,即关键帧数据约为此 H264 文件关键帧数据的 4 倍 // 关键帧数据约 2

【故障解决】ORA-06502错误解决

[故障解决]ORA-06502: PL/SQL: numeric or value error: character string buffer too small 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① EXPDP和IMPDP基于scn的导出 ② ora-06502的解决方法   Tips: ① 若文章代码格式有错乱,推荐使用QQ或360浏览器

排序算法之插入排序Java实现

排序算法之直接插入排序 一.直接插入排序的过程 1.直接插入排序由 N-1 趟排序组成.2.基本思想:将第一个元素看成一个有序子序列,再依次从第二个记录起诸葛插入到这个有序的子序列中. 一般地,将 elem[i] 插入到由 elem[0] ~ elem[i-1] 构成的有序子序列中 时间复杂度:O(n) ~ O(n^2) 原始数组为:[74, 27, 85, 59, 41, 66, 37, 92, 4, 93]--------------------------------------第 1趟[

HTML URL 编码

下面是用 URL 编码形式表示的 ASCII 字符(十六进制格式). 十六进制格式用于在浏览器和插件中显示非标准的字母和字符. URL 编码 - 从 %00 到 %8f ASCII Value URL-encode ASCII Value URL-encode ASCII Value URL-encode æ %00 0 %30 ` %60   %01 1 %31 a %61   %02 2 %32 b %62   %03 3 %33 c %63   %04 4 %34 d %64   %05

HTML ISO-8859-1 参考手册

HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集. ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 7 比特 ASCII. ISO-8859-1 的较高部分(从 160 到 255 之间的代码)全都有实体名称. 这些符号中的大多数都可以在不进行实体引用的情况下使用,但是实体名称或实体编号为那些不容易通过键盘键入的符号提供了表达的方法. 注释:实体名称对大小写敏感. 带有实体名称的 ASCII 实体 结果 描述 实体名称 实体编号 " quot