第八章 高阶函数.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档