- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第⼆章:类型和函数
第⼆章:类型和函数
类型是⼲什么⽤的?
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
您可能关注的文档
- 第二节 旅游基本属性.ppt
- 第二节地球的形状与大小.ppt
- 第二篇 投资银行的承销业务.ppt
- 第二篇 物料装卸搬运系统分析.ppt
- 第二篇 C# 中对象的创建1.ppt
- 第二篇 Project2007的操作界面.pdf
- 第二篇 创建表间关系.ppt
- 第二篇 公钥密码体制身份认证.ppt
- 第二篇 密码学概论.ppt
- 第二篇 使用Windows Sockets 9.pdf
- 抢分秘籍10 带电粒子电场中的直线运动、偏转和交变电电场中的应用(三大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍11 带电粒子在组合场、叠加场中的运动(五大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍11 带电粒子在组合场、叠加场中的运动(五大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍12 电磁感应中的电路与图像问题(二大题型)(解析版) -2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍12 电磁感应中的电路与图像问题(二大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍14 热力学定律与气体实验定律综合应用(五大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍13 电磁感应中的动力学、能量和动量问题(三大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍14 热力学定律与气体实验定律综合应用(五大题型)(原卷版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍16 振动图像与波动图像的综合应用(三大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
- 抢分秘籍15 光的折射、全反射的综合应用(二大题型)(解析版)-2025年高考物理冲刺抢押秘籍.pdf
最近下载
- 2024年信息系统监理师考试真题及答案.docx VIP
- 第17课 辛亥革命与中华民国的建立 课件(共25张PPT)-中职高一上学期高教版(2025)中国历史全一册(含音频+视频).pptx VIP
- 基于区块链的数字身份认证系统设计.docx VIP
- A10联盟2025届高三4月质量检测考试 物理试卷(含答案解析).pdf
- 现场管理人机料法环知识培训课件(PPT-46张).ppt
- ASTM E384-17美国材料与试验协会标准.pdf VIP
- 21《杨氏之子》公开课一等奖创新教学设计.docx VIP
- 2022监理工程师《建设工程目标控制(交通)》公路工程费用与进度控制.pdf VIP
- 供热企业运检人员专业知识习题集.pdf VIP
- 《严格规范涉企行政检查》专题讲座.pptx
文档评论(0)