列表程序设计实例.pptVIP

  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文档。上传文档
查看更多
列表程序设计实例.ppt

列表程序设计实例 为图形建模 图形的类型 界面 图形上的函数 反转的性质 图形的组合 组合的性质 组合性质 组合性质 输出图形 自下而上的设计(Bottom-Up Design) 自下而上的设计 自上而下的设计(Top-Down Design) 自上而下的方法 问题:图形的应用 使用已有图形的例 局部定义 问题:做一个棋盘 制作棋盘 定义 Quartet 图形的表示 关于String 垂直翻转 水平翻转 水平翻转 垂直拼接 水平拼接 水平拼接 打印图形 换行 打印图形 图形库的扩充:叠加运算 先解决一个简单问题? 解决简单问题? 叠加图形 图形库 定义模块界面 小结 小结 作业 Print as ”###\n# #\n###\n” [”###”, ”# #”, ”###”] Haskell为这种常见运算提供了一个标准函数 unlines :: [String] - String printPicture :: Picture - IO () printPicture pic = putStr (unlines pic) superimpose [” # ”, ” # ”, ”######”, ” # ”, ” # ”] [” # ”, ” # ”, ”######”, ” # ”, ” # ”] [” ## ”, ” # # ”, ”######”, ” # # ”, ” ## ”] 我们可以叠加两个字符: superimposeChar :: Char - Char - Char superimposeChar c c’ = if c==’#’ then ’#’ else c’ 然后叠加两个行: superimposeLine :: String - String - String superimposeLine s s’ = [superimposeChar c c’ | (c,c’) - zip s s’] superimposeLine ”# ” ” #” [superimposeChar ’#’ ’ ’, superimposeChar ’ ’ ’ ’, superimposeChar ’ ’ ’#’] ”# #” superimpose :: Picture - Picture - Picture superimpose p q = [superimposeLine pline qline | (pline, qline) - zip p q] * 列表是非常具有表现力的类型。我们将通过一个图形库的设计说明列表类型的使用。 These slides are borrowed from John Hughes 一个处理图形的库包含: 表示图形的类型,即其中的每个值表示一个图形; 处理图形的基本运算,其他运算均可以用基本运算实现。 图形是一种数据,我们用一个类型来表示这种数据: type Picture = ... 未知 部分界面 只对实现者是公开的 如果一个类型的名是公开的,但其表示是私有的,则称这个类型是抽象数据类型( abstract data type). 用户可以假定什么? 实现应该提供什么? 一个界面定义了两个程序构件之间应该遵守的“协议”。 实现可以是任意的,只要遵守协议即可。 flipH flipV flipH, flipV :: Picture - Picture 反转函数 flipH, flipV 应该具有什么性质呢? flipH (flipH pic) == pic flipV (flipV pic) == pic flipH (flipV pic) == flipV (flipH pic) 用户可以假定的性质 实现者必须保证的性质. sideBySide above above, sideBySide :: Picture - Picture - Picture a `above` (b `above` c) == (a `above` b) `above` c flipH (a `above` b) == flipH a `above` flipH b flipV (a `above` b) == flipV b `above` flipV a 当一个图形构造完成时,我们可以将其输出 printPicture :: Picture - IO () 假定以上运算已经实现,我们便可使用图形库进行程序设计。 有趣的函数

文档评论(0)

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

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

1亿VIP精品文档

相关文档