当前位置: 首页 > 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.gsyq.cn/news/117308.html

相关文章:

  • 2025年中山可靠的无溶剂环氧涂料批发选哪家,石墨烯涂料/环氧玻璃钢/环氧酚醛/无溶剂环氧涂料/无溶剂环氧涂料设计推荐 - 品牌推荐师
  • 基于微服务器架构的党支部学习活动平台
  • 实用指南:智能网联汽车信息安全深度解析:从UN-R155与GB44495标准到OBD/UDS技术实践
  • AI创意应用 - 起飞吧,气球!
  • 吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 (三)11卷积与Inception网络
  • 通用 AI · Universal AI 2
  • Product Hunt 每日热榜 | 2025-12-17
  • Agent学习——通过ZENMUX来使用Xiaomi MiMo-V2-Flash(自用)
  • 新手跨境电商实测:Apache 搭站,雷池 WAF 零基础部署
  • es:python:指定索引的mapping和获取mapping
  • 【dz-943】基于单片机的电压表监测仪
  • TikTok Studio创作者工具打不开怎么办?
  • 2025年杭州技术好的公交广告联系方式排行榜单,户外led大屏广告/公交广告/广播电台广告/地铁广告/公交广告品牌推荐排行榜单 - 品牌推荐师
  • 电商网站如何用vue-qrcode实现优惠券分享?
  • 还在问免费音效网站有哪些?这份清单已经帮你筛掉了不靠谱的
  • 对比实测:传统安装vsDocker部署MySQL8的效率差异
  • 分拣机器人推荐,解锁智能分拣新姿势,这些优质机型值得关注
  • 空压空调AI智控的发明专利
  • 【导出】前端 js 导出下载文件时,文件名前后带下划线问题
  • 力控机器人推荐,从原理到选型,解锁柔性生产新可能
  • Java小白必看:5分钟上手MD5加密解密
  • 【dz-948】基于单片机为核心控制器件的国旗升降控制系统
  • 【dz-949】矿井安全通风系统设计
  • Oracle安装图解:小白也能看懂的全流程
  • 口碑好的固液混合电容供应商,你知道是哪家?
  • 2025级C语言第四次周测题解 - 教程
  • MHT-FN820 光纤组合导航系统技术指南:极致精度导航的多接口协同与工程落地
  • 电商系统中的MySQL NULL处理实战:NVL的5个典型场景
  • LVGL | 不同刷屏感受
  • Cam350新手入门:从零开始掌握PCB设计工具