在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → Haskell趣学指南.pdf

Haskell趣学指南.pdf

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:2.81M
  • 下载次数:5
  • 浏览次数:123
  • 发布时间:2021-02-17
  • 实例类别:一般编程问题
  • 发 布 人:id135711
  • 文件格式:.pdf
  • 所需积分:2

实例介绍

【实例简介】这份教学主要针对已经有使用命令式程序语言 (imperative programming languages) 写程序经验 (C, C , Java, Python …) 、却未曾接触过函 数式程序语言 (functional programming languages) (Haskell, ML, OCaml …) 的读者。

【实例截图】

【核心代码】

目录
第一章 简介 1
§1.1 关于这份教学 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
§1.2 什么是 Haskell? . . . . . . . . . . . . . . . . . . . . . . . . . 2
§1.3 你需要些什么来使用 Haskell 呢? . . . . . . . . . . . . . . . . 4
第二章 从零开始 6
§2.1 准备好了吗? . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
§2.2 初学者的第一个函数 . . . . . . . . . . . . . . . . . . . . . . . 10
§2.3 List 入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
§2.4 使用 Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
§2.5 List Comprehension . . . . . . . . . . . . . . . . . . . . . . . 20
§2.6 Tuple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
第三章 Types and Typeclasses 27
§3.1 Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
§3.2 Type variables . . . . . . . . . . . . . . . . . . . . . . . . . . 30
§3.3 Typeclasses 入门 . . . . . . . . . . . . . . . . . . . . . . . . . 31
第四章 函数的语法 37
§4.1 模式匹配 (Pattern matching) . . . . . . . . . . . . . . . . . . 37
§4.2 什么是 Guards . . . . . . . . . . . . . . . . . . . . . . . . . . 42
§4.3 关键字 Where . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
§4.4 关键字 Let . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
§4.5 Case expressions . . . . . . . . . . . . . . . . . . . . . . . . . 49
第 ii 页 目录 Haskell 趣学指南
第五章 递回 52
§5.1 你好,递回! . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
§5.2 实现 Maximum . . . . . . . . . . . . . . . . . . . . . . . . . . 53
§5.3 来看几个递回函数 . . . . . . . . . . . . . . . . . . . . . . . . 54
§5.4 “快速” 排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
§5.5 用递回来思考 . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
第六章 高阶函数 61
§6.1 Curried functions . . . . . . . . . . . . . . . . . . . . . . . . . 61
§6.2 是时候了,来点高阶函数! . . . . . . . . . . . . . . . . . . . 64
§6.3 map 与 filter . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
§6.4 lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
§6.5 关键字 fold . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
§6.6 有 $ 的函数调用 . . . . . . . . . . . . . . . . . . . . . . . . . 80
§6.7 Function composition . . . . . . . . . . . . . . . . . . . . . . 81
第七章 模组 (Modules) 85
§7.1 装载模组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
§7.2 Data.List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
§7.3 Data.Char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
§7.4 Data.Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
§7.5 Data.Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
§7.6 建立自己的模组 . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Haskell 趣学指南 目录 第 iii 页
第八章 构造我们自己的 Types 和 Typeclasses 117
§8.1 Algebraic Data Types 入门 . . . . . . . . . . . . . . . . . . . 117
§8.2 Record Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . 121
§8.3 Type parameters . . . . . . . . . . . . . . . . . . . . . . . . . 124
§8.4 Derived instances . . . . . . . . . . . . . . . . . . . . . . . . . 130
§8.5 Type synonyms . . . . . . . . . . . . . . . . . . . . . . . . . . 135
§8.6 Recursive data structures (递回地定义数据结构) . . . . . . . 140
§8.7 Typeclasses 的第二堂课 . . . . . . . . . . . . . . . . . . . . . 145
§8.8 yes-no typeclass . . . . . . . . . . . . . . . . . . . . . . . . . . 150
§8.9 Functor typeclass . . . . . . . . . . . . . . . . . . . . . . . . . 153
§8.10 Kind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
第九章 输入与输出 163
§9.1 Hello, world! . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
§9.2 文件与字符流 . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
§9.3 命令行引数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
§9.4 乱数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
§9.5 Bytestrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
§9.6 Exceptions (异常) . . . . . . . . . . . . . . . . . . . . . . . . 218
第十章 函数式地思考来解决问题 227
§10.1 运算逆波兰表示法 (Reverse Polish notation form) . . . . . . 227
§10.2 路径规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
第 iv 页 目录 Haskell 趣学指南
第十一章 Functors, Applicative Functors 与 Monoids 243
§11.1 温习 Functors . . . . . . . . . . . . . . . . . . . . . . . . . . 243
§11.2 Applicative functors . . . . . . . . . . . . . . . . . . . . . . . 257
§11.3 关键字 “newtype” . . . . . . . . . . . . . . . . . . . . . . . . 277
11.3.1 Using newtype to make type class instances . . . . . . 280
11.3.2 On newtype laziness . . . . . . . . . . . . . . . . . . . 282
11.3.3 type vs newtype vs data . . . . . . . . . . . . . . . . . 284
§11.4 Monoids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
11.4.1 Lists are monoids . . . . . . . . . . . . . . . . . . . . . 289
11.4.2 Product and Sum . . . . . . . . . . . . . . . . . . . . . 290
11.4.3 Any and ALL . . . . . . . . . . . . . . . . . . . . . . . 292
11.4.4 The Ordering monoid . . . . . . . . . . . . . . . . . . 293
11.4.5 Maybe the monoid . . . . . . . . . . . . . . . . . . . . 297
11.4.6 Using monoids to fold data structures . . . . . . . . . 299
第十二章 来看看几种 Monad 304
§12.1 动手做做看: Maybe Monad . . . . . . . . . . . . . . . . . . . 306
§12.2 Monad type class . . . . . . . . . . . . . . . . . . . . . . . . 309
§12.3 走钢索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
§12.4 do 表示法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
§12.5 List Monad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
12.5.1 A knight’s quest . . . . . . . . . . . . . . . . . . . . . 333
§12.6 Monad laws (单子律) . . . . . . . . . . . . . . . . . . . . . . 336
12.6.1 Left identity . . . . . . . . . . . . . . . . . . . . . . . 336
12.6.2 Right identity . . . . . . . . . . . . . . . . . . . . . . . 337
12.6.3 Associativity . . . . . . . . . . . . . . . . . . . . . . . 338
Haskell 趣学指南 目录 第 v 页
第十三章 再来看看更多 Monad 341
§13.1 你所不知道的 Writer Monad . . . . . . . . . . . . . . . . . . 342
13.1.1 Monoids 的好处 . . . . . . . . . . . . . . . . . . . . . 344
13.1.2 The Writer type . . . . . . . . . . . . . . . . . . . . . 346
13.1.3 Using do notation with Writer . . . . . . . . . . . . . 348
13.1.4 Adding logging to programs . . . . . . . . . . . . . . . 350
13.1.5 Inefficient list construction . . . . . . . . . . . . . . . 352
13.1.6 Difference lists . . . . . . . . . . . . . . . . . . . . . . 353
13.1.7 Comparing Performance . . . . . . . . . . . . . . . . . 355
§13.2 Reader Monad . . . . . . . . . . . . . . . . . . . . . . . . . . 356
§13.3 State Monad . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
13.3.1 Stack and Stones . . . . . . . . . . . . . . . . . . . . . 361
13.3.2 The State Monad . . . . . . . . . . . . . . . . . . . . . 362
13.3.3 随机性与 state monad . . . . . . . . . . . . . . . . . . 366
§13.4 Error Monad . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
§13.5 一些实用的 Moandic functions . . . . . . . . . . . . . . . . . 369
13.5.1 liftM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
13.5.2 The join function . . . . . . . . . . . . . . . . . . . . . 373
13.5.3 filterM . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
13.5.4 foldM . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
13.5.5 Making a safe RPN calculator . . . . . . . . . . . . . . 380
13.5.6 Composing monadic functions . . . . . . . . . . . . . . 384
§13.6 定义自己的 Monad . . . . . . . . . . . . . . . . . . . . . . . 386
第 vi 页 目录 Haskell 趣学指南
第十四章 Zippers 数据结构 393
§14.1 来走二元树吧! . . . . . . . . . . . . . . . . . . . . . . . . . . 394
§14.2 凡走过必留下痕迹 . . . . . . . . . . . . . . . . . . . . . . . . 397
14.2.1 Going back up . . . . . . . . . . . . . . . . . . . . . . 398
14.2.2 Manipulating trees under focus . . . . . . . . . . . . . 401
14.2.3 I’m going straight to top, oh yeah, up where the air is
fresh and clean! . . . . . . . . . . . . . . . . . . . . . . 402
§14.3 来看串行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
§14.4 阳春的文件系统 . . . . . . . . . . . . . . . . . . . . . . . . . 405
14.4.1 A zipper for our file system . . . . . . . . . . . . . . . 406
14.4.2 Manipulating our file system . . . . . . . . . . . . . . 409
§14.5 小心每一步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
附录 A FAQ 414
§A.1 我能把这份教学放在我的网站吗?我可以更改里面的内容吗? 414
§A.2 推荐其它几个 Haskell 读物? . . . . . . . . . . . . . . . . . . 414
§A.3 我怎么联络到你? . . . . . . . . . . . . . . . . . . . . . . . . 414
§A.4 我想要一些习题! . . . . . . . . . . . . . . . . . . . . . . . . 414
§A.5 关于作者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
§A.6 关于简体译者 . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
§A.7 关于繁体译者 . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
附录 B Resource 416
§B.1 Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
§B.2 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
§B.3 Lectures & Articles . . . . . . . . . . . . . . . . . . . . . . . 416
Haskell 趣学指南 目录 第 vii 页
§B.4 Forum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
§B.5 Online Judge . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
§B.6 Books . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
§B.7 PL Researchers . . . . . . . . . . . . . . . . . . . . . . . . . . 418
§B.8 Interesting Projects . . . . . . . . . . . . . . . . . . . . . . . 418
§B.9 Taiwan Functional Programming User Group . . . . . . . . . 418

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警