当前位置: 首页 > news >正文

scheme中的序列操作

本节对序列操作进行总的抽象介绍。
从两个程序入手:
(define (sum-odd-square tree)
(cond ((null? tree) 0)
((not (pair? tree))
(if (odd? tree) (square tree) 0))
(else (+ (sum-odd-square (car tree))
(sum-odd-square (cdr tree))))))

(define (even-fibs n)
(define (next k)
(if (> k n)
nil)
(let ((f (fib k)))
(if (even? f)
(cons f (next (+ k 1)))
(next (+ k 1)))))
(next 0))
第一个程序,枚举一棵树的树叶,过滤其中的奇数,对选出的每一个数进行平方,从0开始累加
第二个程序,枚举从0到n的整数,计算其中的斐波那契数列,过滤其中的偶数,用cons累积结果
容易总结出,这两个程序的基本流程都是枚举-过滤-计算-累积,如果我们能将该流程进行抽象,抽象成过滤器-映射-累积器的形式,能使得这个流程更加清晰。

点击查看代码
;遍历
(define (enumerate-tree tree)(cond ((null? tree) nil)((not(pair? tree)) (list tree))(else (append (enumerate-tree (car tree))
;过滤
(define (filter predicate sequence)(cond ((null? sequence) nil)((predicate (car sequence))(cons (car sequence)(filter predicate (cdr sequence))))(else (filter predicate (cdr sequence)))))
;累积
(define (accumulate op initial sequence)(if (null? sequence)initial(op (car sequence)(accumulate op initial (cdr sequence)))))
练习2.33 填充下列表达式,完成将一些基本的表操作看作累积的定义:
点击查看代码
(define (map p sequence)(accumulate (lambda (x y) (cons (p x) y)) nil sequence))
(define (append seq1 seq2)(accumulate cons seq1 seq2))
(define (length sequence)(accumulate (lambda (x y)(+ 1 y) 0 sequence)))

练习2.34 对于x的某个给定值,求出一个多项式在x的值,也可以形式化为一种累积。假定需要求下面多项式的值:
anxn+an-1xn-1……+a1x+a0
这里可以采用著名的Horner规则,构造下面的计算:
(……(anx+an-1)x+……+a1)x+a0
请填充下面的模板,做出一个利用Horner规则求多项式值的过程。

点击查看代码
;完整的就是这样了,根据Horner的规则,做(高项*x+低项)*x……的翻译即可
(define (horner-eval x coefficient-sequence)(accumulate(lambda (this-coeff higher-terms) (+ this-coeff (* x higher-terms)))0coefficient-sequence)
)
http://www.jsqmd.com/news/106343/

相关文章:

  • 力扣 “两数之和” 最优解:哈希表 O (n) 时间复杂度实现详解
  • 30-40 万新能源汽车 兼顾续航与智能的热门之选 - 速递信息
  • Skipping xxx as repository xxxx doesn‘t support architecture ‘i386‘
  • 基于WEB的高校计算机数据库课程知识图谱系统的设计与实现
  • TLS网络安全协议巩固知识基础题(2)
  • 网站建设公司怎么选?2025年网站设计制作公司推荐指南
  • 告别重复编码!10+顶级开发工具,引爆程序员效率革命
  • 聚焦家庭需求:20 万左右新能源 SUV 空间与安全优选车型
  • 基于SpringBoot + Vue的高校科研项目申报审批管理系统
  • 2026年河北省职业院校技能大赛中职组“网络建设与运维”竞赛样题
  • 基于SpringBoot + Vue的个性化学习系统
  • C语言5——常见关键字 define定义常量 表达式求值
  • 数学刷题总结
  • FlutterOpenHarmony底部导航栏组件开发
  • 2026年河北省职业院校技能大赛“信息技术应用创新”赛项(高职组)竞赛样题
  • FlutterOpenHarmony动画效果实现指南
  • 深度分析:AI智能体记忆是如何管理的?
  • 2025年中山可靠的无溶剂环氧涂料批发选哪家,石墨烯涂料/环氧玻璃钢/环氧酚醛/无溶剂环氧涂料/无溶剂环氧涂料设计推荐 - 品牌推荐师
  • 男生脱发:热门育发液哪个牌子效果最好?十大口碑防脱育发产品排行榜出炉 - 速递信息
  • 零样本克隆音色有多强?实测EmotiVoice语音复刻能力
  • kanass全面介绍(15) - Kanass如何有效集成sward文档
  • XL520无线接收芯片的简略说明
  • wechatapi-微信ipad协议新篇章-让账号更智能
  • 实用指南:智能网联汽车信息安全深度解析:从UN-R155与GB44495标准到OBD/UDS技术实践
  • sward全面介绍(14) - 集成企业微信,使用企业微信扫码登录sward
  • 【dz-943】基于单片机的电压表监测仪
  • 吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 (三)11卷积与Inception网络
  • Product Hunt 每日热榜 | 2025-12-17
  • Agent学习——通过ZENMUX来使用Xiaomi MiMo-V2-Flash(自用)
  • 苹果 iOS 开发真正复杂的不是写代码这方面,是证书、构建、上架