- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第⼆章:类型和函数
第⼆章:类型和函数
类型是⼲什么⽤的?
Haskell 中的每个函数和表达式都带有各⾃的类型,通常称⼀个表达式拥有类型 T ,
或者说这个表达式的类型为 T 。举个例 ,布尔值 True 的类型为 Bool ,⽽字符串
foo 的类型为 String 。⼀个值的类型标识了它和该类型的其他值所共有的⼀簇属性
(property ),⽐如我们可以对数字进⾏相加,对列表进⾏拼接,诸如此类。
在对 Haskell 的类型系统进⾏更深⼊的探讨之前,不妨先来了解下,我们为什么要关
⼼类型 —— 也即是,它们是⼲什么⽤的?
在计算机的最底层,处理的都是没有任何附加结构的字节 (byte )。⽽类型系统在这
个基础上提供了抽象:它为那些单纯的字节加上了意义,使得我们可以说“这些字节
是⽂本” ,“那些字节是机票预约数据” ,等等。
通常情况下,类型系统还会在标识类型的基础上更进⼀步:它会阻⽌我们混合使⽤不
同的类型,避免程序错误。⽐如说,类型系统通常不会允许将⼀个酒店预约数据当作
汽车租凭数据来使⽤。
引⼊抽象的使得我们可以忽略底层细节。举个例 ,如果程序中的某个值是⼀个字符
串,那么我不必考虑这个字符串在内部是如何实现的,只要像操作其他字符串⼀样,
操作这个字符串就可以了。
类型系统的⼀个有趣的地⽅是,不同的类型系统的表现并不完全相同。实际上,不同
类型系统有时候处理的还是不同种类的问题。
除此之外,⼀门语⾔的类型系统,还会深切地影响这门语⾔的使⽤者思考和编写程序
的⽅式。⽽ Haskell 的类型系统则允许程序员以⾮常抽象的层次思考,并写出简洁、
⾼效、健壮的代码。
Haskell 的类型系统
Haskell 中的类型有三个有趣的⽅⾯:⾸先,它们是强 (strong )类型的;其次,它们
是静态 (static )的;第三,它们可以通过⾃动推导 (automatically inferred )得出。
后⾯的三个⼩节会分别讨论这三个⽅⾯,介绍它们的长处和短处,并列举 Haskell 类
型系统的概念和其他语⾔⾥相关构思之间的相似性。
强类型
Haskell 的强类型系统会拒绝执⾏任何⽆意义的表达式,保证程序不会因为这些表达式
⽽引起错误:⽐如将整数当作函数来使⽤,或者将⼀个字符串传给⼀个只接受整数参
数的函数,等等。
遵守类型规则的表达式被称为是“类型正确的” (well typed ),⽽不遵守类型规则、会
引起类型错误的表达式被称为是“类型不正确的” (ill typed )。
Haskell 强类型系统的另⼀个作⽤是,它不会⾃动地将值从⼀个类型转换到另⼀个类型
(转换有时又称为强制或变换)。举个例 ,如果将⼀个整数值作为参数传给了⼀个
接受浮点数的函数,C 编译器会⾃动且静默 (silently )地将参数从整数类型转换为浮
点类型,⽽ Haskell 编译器则会引发⼀个编译错误。
要在 Haskell 中进⾏类型转换,必须显式地使⽤类型转换函数。
有些时候,强类型会让某种类型代码的编写变得困难。⽐如说,⼀种编写底层 C 代码
的典型⽅式就是将⼀系列字节数组当作复杂的数据结构来操作。这种做法的效率⾮常
⾼,因为它避免了对字节的复制操作。因为 Haskell 不允许这种形式的转换,所以要
获得同等结构形式的数据,可能需要进⾏⼀些复制操作,这可能会对性能造成细微影
响。
强类型的最⼤好处是可以让 bug 在代码实际运⾏之前浮现出来。⽐如说,在强类型的
语⾔中,“不⼩⼼将整数当成了字符串来使⽤”这样的情况不可能出现。
[注意:这⾥说的“bug”指的是类型错误,和我们常说的、通常意义上的 bug 有⼀些区
别。
静态类型
静态类型系统指的是,编译器可以在编译期 (⽽不是执⾏期)知道每个值和表达式的
类型。Haskell 编译器或解释器会察觉出类型不正确的表达式,并拒绝这些表达式的执
⾏:
Prelude True False
interactive:2:9:
Couldnt match expected type Bool with actual type [Char]
In the second argument of (), namely False
In the expression: True False
In an equation for it: it = True False
您可能关注的文档
最近下载
- 《关于促进人工智能和实体经济深度融合的指导意见》解读.pdf VIP
- 互联网数据中心基础设施监控系统北向接口规范V1.1.pdf VIP
- 软件配置管理计划(模板)-GJB438C.docx VIP
- 2024年3月17日多省(市、区)公务员考试《公安专业科目》真题及答案 .docx VIP
- 污水处理厂化验员工试题带答案.docx VIP
- 路基路面中线偏位试验检测记录表(坐标法).docx
- 广东省某焦化厂废水处理工艺设计.docx
- SY-T 5824-93钻杆分级检验方法.pdf VIP
- 2021届高三地理第一轮复习中国地理中国的自然环境专题跟踪训练.docx VIP
- 2021年12月12日江苏省公务员考试《公安专业科目》试题(网友回忆版).docx VIP
文档评论(0)