- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计技术和方法_sicp02-2
2. 构造数据抽象(2)
本节进一步讨论数据抽象的问题,包括
一个图形语言
如何应用数据抽象的概念建立一个图形语言
该语言能很好地支持各种复杂的抽象和组合
符号数据(与数值数据对应)
如何表示符号数据
符号表达式处理(符号计算,symbolic computation )
抽象数据的多重表示
程序设计技术和方法 裘宗燕,2012-10-17 -1-
一个图形语言
以一个构造简单图形语言为例,展示数据抽象和闭包的作用和威力
其中高阶过程起着关键作用
主要功能:构造重复元素的图形,元素可以按规则改变形状/大小
两个这种图形的例子:
具有Escher 一些画的风格,当然远没有Escher 的画复杂和深刻
程序设计技术和方法 裘宗燕,2012-10-17 -2-
图形语言:基本想法
基本元素:painter。一个painter 的功能是画出一种特定图像,它
可以根据要求对所画图像进行变形(改变形状和大小)
图像的变形基于给定的具体框架:
wave 画的图 rogers 画的图
图像组合操作:(现在假设定义了几种组合操作,具体实现见后)
beside 使用两个painter,让它们分别在左右两个半区画图
below 使用两个painter,让它们分别在上下两个半区画图
flip-vert 使用一个painter,画出上下反转后的图
flip-hozil 使用一个painter,画出左右反转后的图
程序设计技术和方法 裘宗燕,2012-10-17 -3-
图形语言:组合
painter 的组合还是painter,例: 从一个过程中可
能抽取出多个不
(define wave2 (beside wave (flip-vert wave)))
同的模式
(define wave4 (below wave2 wave2))
如wave4,也可
以把反转方式抽
出来作为参数
可以有其他考虑
可以考虑painter 组合的重要模式,将其实现为Scheme 过程
例如,抽象出wave4 里的模式,定义为对图形的操作:
(define (flipped-pairs painter)
(let ((painter2 (beside painter (flip-vert painter))))
(below painter2 painter2)))
(define wave4 (flipped-pairs wave)) 这样定义好的操作可以
用于任何painter
程序设计技术和方法 裘宗燕,2012-10-17 -4-
图形语言:组合
组合操作:向右分割和分支:
(define (right-split painter n)
(if (=
文档评论(0)