sicp每日一题[2.36-2.37]

news/2024/10/8 11:31:55

果然习惯不能停,就两天没学,昨天就忘的干干净净了。。今天把昨天的补上

Exercise 2.36

The procedure accumulate-n is similar to accumulate except that it takes as its third argument a sequence of sequences, which are all assumed to have the same number of elements. It applies the designated accumulation procedure to combine all the first elements of the sequences, all the second elements of the sequences, and so on, and returns a sequence of the results. For instance, if s is a sequence containing four sequences, ((1 2 3) (4 5 6) (7 8 9) (10 11 12)),then the value of (accumulate-n + 0 s) should be the sequence (22 26 30). Fill in the missing expressions in the following definition of accumulate-n:

(define (accumulate-n op init seqs)(if (null? (car seqs))nil(cons (accumulate op init ⟨??⟩)(accumulate-n op init ⟨??⟩))))

这道题我自己没做出来,搜了一下别人的答案才发现原来这么简单。。

(define (accumulate-n op init seqs)(if (null? (car seqs))nil(cons (accumulate op init (map car seqs))(accumulate-n op init (map cdr seqs)))))(define test (list (list 1 2 3) (list 4 5 6) (list 7 8 9) (list 10 11 12)))
(accumulate-n + 0 test); 执行结果
'(22 26 30)

image


这道题符号太多了,还是直接截图吧。
这道题目还是挺难的,第一个矩阵乘向量比较简单,让向量依次跟矩阵的每一行点乘即可;第二个其实我不会做,我就是随便把 cons 和 nil 填到了空出的位置,没想到一执行恰好就是我要的结果,然后我回过头去看了一下 accumulate-n 的代码,发现它其实实现的就是转置的功能;第三个首先要理解它对 n 进行转置的目的,其实 m x n 就等价于用 m 的每一行跟 n 的每一列依次做点乘,现在对 n 做了转置之后,就相当于让 m 的每一行和 n 的每一行做点乘,明白了这一点这道题就可以很容易地实现了。

; m 表示矩阵,v 表示向量,m 的行数必须等于 v 中元素的个数
; 矩阵乘向量,相当于用矩阵的每一行跟向量做点乘
(define (matrix-*-vector m v)(map (lambda (x) (dot-product x v)) m)); mat 表示矩阵
(define (transpose mat)(accumulate-n cons nil mat)); m, n 都表示矩阵,m 的列数必须等于 n 的行数
; 最后的结果矩阵行数等于 m 的行数,列数等于 n 的列数
(define (matrix-*-matrix m n)(let ((cols (transpose n)))(map (lambda (mat) (matrix-*-vector cols mat)) m)))(define mat (list (list 1 2 3 4) (list 4 5 6 6) (list 6 7 8 9)))
(define mat2 (list (list 1 2 3 4) (list 4 5 6 6) (list 6 7 8 9) (list 1 2 3 4)))
(define v (list 1 3 3 1))(dot-product v (list 2 3 5 7))
(matrix-*-vector mat v)
(transpose mat)
(matrix-*-matrix mat mat2); 执行结果
33
'(20 43 60)
'((1 4 6) (2 5 7) (3 6 8) (4 6 9))
'((31 41 51 59) (66 87 108 124) (91 121 151 174))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68934.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

秒杀系统的原则和注意项

做秒杀方案亦是如此,秒杀活动经常会引发高并发、系统宕机和库存超卖的棘手问题,作为开发者,我们该如何在保证系统稳定性的同时,防止业务风险呢?做任何技术方案都需要结合当时的业务场景、资金情况、用户体量等维度综合考虑,没有最好的技术方案,只有最合适的技术方案。做…

电力佩戴安全帽监测 安全带穿戴监测系统

电力佩戴安全帽监测和安全带穿戴监测系统通过在电力作业区域安装摄像头,电力佩戴安全帽监测 安全带穿戴监测系统对工作人员的佩戴情况进行实时监测。电力佩戴安全帽监测 安全带穿戴监测系统利用图像识别和深度学习技术,对工作人员的安全帽和安全带的佩戴情况进行识别和分析。…

比裁员更侮辱人的事发生了。。。

大家好,我是R哥。 前段时间和一个粉丝聊天,说他去年降过一次薪,今年公司又裁了一批,工资又不高,他现在一个人干着几个人的活,每天忙的要命,想脱离,看看更好的机会。 他躲过了裁员,没躲过降薪,没躲过一个人泰山压顶。 本想着冲动离职全身心找工作, 又想到有房贷要供,…

.NET 8.0 酒店管理系统设计与实现

前言 给大家推荐一个基于.NET 8.0 的中小型酒店设计的管理系统。 随着酒店的日常工作增加,很难用人工去进行处理一些繁琐的数据,也可能会因为人工的失误而造成酒店的损失,因此需要一款可以协助酒店进行内部管理的管理软件。 本文将详细介绍如何开发和使用酒店管理系统。 项目…

工地临边防护缺失识别检测系统

工地临边防护缺失识别检测系统通过在工地临边区域安装摄像头,工地临边防护缺失识别检测系统对现场施工工地进行实时监测。工地临边防护缺失识别检测系统检测到没有按照要求放置临边防护设备时,将自动发出警报提示现场管理人员及时采取措施。同时,工地临边防护缺失识别检测系…

渣土车密闭运输识别系统

渣土车密闭运输识别系统通过在工地出入口及周边安装摄像头,渣土车密闭运输识别系统对渣土车的密闭运输情况进行实时监测,渣土车密闭运输识别系统利用图像识别技术,对渣土车的密闭状态进行识别和分析。渣土车密闭运输识别系统检测到有未密闭的渣土车进入工地区域时,将自动发…

AI视频边缘分析盒

Ai视频边缘分析盒通过在场所内安装高清摄像头,AI视频边缘分析盒将采集到的视频信号通过AI视觉智能算法进行智能分析。AI视频边缘分析盒利用人工智能技术,可以对场所内的行人、车辆、物品等进行识别和分析,发现异常情况并及时报警。AI视频边缘分析盒利用人工智能技术,能够对…