- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 高阶函数
第⼋章 ⾼阶函数
8.1 简介
8.2 映射
8.3 过滤
8.4 归档
8.5 排序
8.6 apply函数
8.7 编写⾼阶函数
8.8 ⼩结
8.9 习题解答
8.1 简介
⾼阶函数 (Higher Order Function )是⼀种以函数为参数的函数。它 都被⽤于映射
(mapping )、过滤 (filtering )、归档 (folding )和排序 (sorting )表。⾼阶函数提
⾼了程序的模块性。编写对各种情况都适⽤的⾼阶函数与为单⼀情况编写递归函数相
⽐,可以使程序更具可读性。⽐如说,使⽤⼀个⾼阶函数来实现排序可以使得我 使
⽤不同的条件来排序,这就将排序条件和排序过程清楚地划分开来。函数sort具有
两个参数,其⼀是⼀个待排序的表,其⼆是定序 (Ordering )函数。下⾯展⽰了按照
⼤⼩将⼀个整数表正序排序。函数就是 (本例中的)两数的定序函数。
(sort (7883 9099 6729 2828 7754 4179 5340 2644 2958 2239) )
;⇒ (2239 2644 2828 2958 4179 5340 6729 7754 7883 9099)
另⼀⽅⾯,按照每个数末两位的⼤⼩排序可以按下⾯的⽅式实现:
(sort (7883 9099 6729 2828 7754 4179 5340 2644 2958 2239)
(lambda (x y) ( (modulo x 100) (modulo y 100))))
;⇒ (2828 6729 2239 5340 2644 7754 2958 4179 7883 9099)
正如这⾥所演⽰的,像快速排序 (Quick Sort )、归并排序 (Merge Sort )等排序过
程,将定序函数完全分离开来提⾼了代码的复⽤性。
在本节中,我将讲解预定义的⾼阶函数,然后介绍如何定义⾼阶函数。由于Scheme并
不区别过程和其它的数据结构,因此你可以通过将函数当作参数传递轻松的定义⾃⼰
的⾼阶函数。
实际上,Scheme 中预定义函数的本质就是⾼阶函数,因为Scheme并没有定义块结构的
语法,因此使⽤lambda表达式作为⼀个块。
8.2 映射
映射是将同样的⾏为应⽤于表所有元素的过程。R5RS定义了两个映射过程:其⼀为
返回转化后的表的map过程,另⼀为注重副作⽤的for- ach过程。
8.2.1 map
map过程的格式如下:
(map proc dur list1 list2 ...)
proc dur 是个与某个过程或lambda表达式相绑定的符号。作为参数的表的个数视
proc dur 需要的参数⽽定。
例:
; Adding ach it m of (1 2 3) and (4 5 6).
(map + (1 2 3) (4 5 6))
;⇒ (5 7 9)
; Squaring ach it m of (1 2 3)
(map (lambda (x) (* x x)) (1 2 3))
;⇒ (1 4 9)
8.2.2 for-each
for- ach的格式与map⼀致。但for- ach并不返回⼀个具体的值,只是⽤于副作
⽤。
例:
(d fin sum 0)
(for- ach (lambda (x) (s t! sum (+ sum x))) (1 2 3 4))
sum
;⇒ 10
练习1
⽤map编写下⾯的函数:
1. ⼀个将表中所有元素翻倍的函数;
2. ⼀个将两个表中对应位置元素相减的函数;
8.3 过滤
尽管过滤函数并没有在R5RS 中定义,但MIT-Scheme实现提供了k p-matching-
it ms和d l t -matching-it m两个函数。其它实现中应该有类似的函数。
(k p-matching-it ms (1 2 -3 -4 5) positiv ?)
;⇒ (1 2 5)
练习2
编写下列函数:
1. 滤取 (Filtering Out )出⼀个表中的偶数;
2. 滤取出不满⾜10 ≤ x ≤ 100的数;
8. 归档
尽管在R5RS 中没有定义归档函数,但MIT-S
您可能关注的文档
- 第二章系统可靠性模型-2.pdf
- 第二类修正贝塞尔函数(Fortran代码).doc
- 第二节 绞车安全运行.ppt
- 第二节命题与量词.doc
- 第二讲 函数复习.doc
- 第二讲 2、圆锥曲线的参数方程.ppt
- 第二讲 三解形全等的条件(八年级2015年数学期末讲义).pdf
- 第二讲 早期希腊哲学.ppt
- 第二讲 递归程序设计.pdf
- 第二讲人类自然观的历史演变.pdf
- 2025至2030中国移动治疗台行业发展研究与产业战略规划分析评估报告.docx
- 2025至2030链激酶行业细分市场及应用领域与趋势展望研究报告.docx
- 2025至2030爆炸物探测扫描仪行业市场占有率及有效策略与实施路径评估报告.docx
- 2025至2030四川省智能制造行业细分市场及应用领域与趋势展望研究报告.docx
- 2026届高三二轮复习试题政治大单元突破练1生产资料所有制与分配制度含解析.docx
- 2026届高三二轮复习试题政治大单元突破练16哲学基本思想与辩证唯物论含解析.docx
- 2026届高三二轮复习试题政治大单元突破练2社会主义市场经济体制含解析.docx
- 浙江省衢州市五校联盟2025-2026学年高二上学期期中联考技术试题-高中信息技术含解析.docx
- 浙江省金丽衢十二校2026届高三上学期11月联考政治试题含解析.docx
- 2026届高三二轮复习试题政治大单元突破练7领导力量:中国共产党的领导含解析.docx
最近下载
- 产后出血预防及处理指南(2023版)PPT课件.pptx VIP
- 《建筑与市政工程施工质量控制通用规范》(GB-55032-2022).docx VIP
- 骨科质量与安全管理指标.pdf VIP
- 国开电大学习网《农业推广学》形成性考核任务1-3答案.pdf VIP
- 气囊测压表获奖课件.pptx VIP
- 《图形创意》课件之五图形创意的语境.ppt VIP
- 故障分析与故障排除.pdf VIP
- 高中地理湘教版必修 第二册(2019)_农业区位因素 公开课教案课件教学设计资料.pptx VIP
- 大学计算机基础练习题库+答案.docx VIP
- 茶树育种学知到智慧树期末考试答案题库2025年信阳农林学院.docx VIP
原创力文档


文档评论(0)