一种带约束的多态类型系统1-北京大学数学科学学院.PDFVIP

一种带约束的多态类型系统1-北京大学数学科学学院.PDF

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

一种带约束的多态类型系统1 2 3 郑红军 张乃孝 ( 北京大学 ) 摘要 本文讨论了一种带约束的多态类型系统,引入了约束类型。约束与全 称量化的结合使得参数化多态函数的应用更安全,同时也为重载的表示和实现 提供了一个新的途径,提高了类型表示的抽象度。本文讨论的类型系统具有两 个不同层次的类型结构,约束的引入与消去是不同层次上的操作。最后,本文 给出了类型检查算法 W ,并证明了此算法中约束的可满足性是可判定的。 关键词 多态 约束类型 类型系统 类型检查 1 引言 多态是有力且灵活的描述机制,许多程序设计语言(如 ML, Ada)都提供了 定义多态函数的能力。多态函数具有一定的开放性,是一种抽象的过程,可以 应用于不同类型的数据。考虑用于比较整数和字符的的‘ ’函数,它们类型是 : Int Int Bool ; : Char Char Bool (´1) 现欲将 ‘ ’定义为比较两个同类型序列的多态函数,在现有的ML 类型系统中, 其类型一般表示为: : a . seq[a] seq[ a] Bool ( ´2) (´2) 中的‘ ’是一种参数化多态(parametric polymorphism) 函数[1],seq[a]表示元素 类型为a 的序列,类型变量a 的全称量化可能会使此函数被应用于无法比较的 序列,从而导致程序运行错误。问题在于,对类型变量a无约束的全称量化使 得此函数可应用的类型范围过宽,这样就降低了程序的安全性。因此,有必要 标识出这类参数化多态函数可能应用的类型范围,以达到安全性与灵活性的统 一[11] 。那么,哪些序列可以用‘ ’来比较呢?确切地说,是那些序列中的元素 可用‘ ’比较的序列: : seq[Char] seq[Char] Bool , : seq[Int] seq[Int] Bool , (´3) : seq[seq[Char]] seq[seq[Char]] Bool , . . . . . . (´1)显示出‘ ’在 Int 和 Char 上的重载,重载是一类特殊的多态(ad-hoc polymorphism) 形式。重载函数对于不同类型的操作数具有不同的函数体,执行 1本项研究得到国家自然科学基金的资助. 郑红军,1969 年生,1997 年在北大计算机系获博士学位,主要研 究领域为软件方法学和程序设计语言.e-mail:zhj@iist.unu.edu. 张乃孝,1942 年生,教授,博士生导师,主要 研究领域为软件方法学和程序设计语言.联系地址:北京大学数学科学院信息科学系(北京100871) . e-mail:naixiao@pku.edu.cn. - 1 - 不同的代码;而参数化多态函数对于不同类型的操作数只有一个函数体,执行 同一段的代码[1] 。Int 和Char 上‘ ’的重载使得(´2)所示的参数化多态函数变为 (´3) 中的重载函数,以至于不能以一般的参数化多态形式统一地给出这些函数 的类型,如果象(´3) 中那样将所有这些重载函数的类型都显式地表示出来又过 于繁琐,也不可能。 Jones 在[12] 中给出的资格类型(qualified types)可用于标识参数化多态函数的 应用类型范围和表示类似于(´3) 的重载函数。资格类型的形式为:a . (a) T (a)意为满足谓词(a) 的所有类型T (a) 。本文所讨论的约束类型是资格类型的 一种具体形式:(a)为 T (a) 的约束。通过约束与全称量化的结合,(´3) 中所有 ‘ ’重载函数的类型可以统一地表示为: : a . ( : a

文档评论(0)

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

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

1亿VIP精品文档

相关文档