《Haskell趣学指南》

2023-11-03 06:50
文章标签 指南 haskell 趣学

本文主要是介绍《Haskell趣学指南》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Haskell趣学指南

基本信息

原书名:Learn You a Haskell for Great Good!: A Beginner's Guide

原出版社: No Starch Press

作者: (斯洛文尼亚)Miran Lipovaca   

译者:李亚舟 宋方睿

丛书名:新锐编程语言集萃

出版社:人民邮电出版社

ISBN:9787115335593

上架时间:2013-12-28

出版日期:2014 年1月

开本:16开

页码:301

版次:1-1

所属分类:计算机 > 软件与程序设计 > 综合 > 高级程序语言设计

 

更多关于》》》 《全程软件测试(第2版)》

 

编辑推荐

动手实践书中想象力丰富、略有点儿疯狂的示例,你将能够:

   ·挥舞纯函数式编程技法,笑看各种“副作用”。

   ·施展Haskell的“惰性”魔法,处理无限数据集。

   ·通过自定义类型、类型类和模块来组织程序。

   ·使用Haskell优雅的输入/输出系统与外部世界分享程序的灵魂。

  学习Haskell这门强大的语言,再没有比阅读这本书更好的方法了!

 

内容简介

    书籍

    计算机书籍

  《haskell趣学指南》是一本讲解haskell这门函数式编程语言的入门指南,语言通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从haskell的基础知识讲起,涵盖了所有的基本概念和语法,内容涉及基本语法、递归、类型和类型类、函子、applicative 函子、monad、zipper及所有haskell重要特性和强大功能。

  《haskell趣学指南》适合对函数式编程及haskell语言感兴趣的开发人员阅读。

 

目录

《haskell趣学指南》

第1章 各就各位,预备! 1

1.1 调用函数 3

1.2 小朋友的第一个函数 4

1.3 列表入门 6

1.3.1 拼接列表 6

1.3.2 访问列表中的元素 8

1.3.3 嵌套列表 8

1.3.4 比较列表 8

1.3.5 更多列表操作 9

1.4 得州区间 11

1.5 我是列表推导式 13

1.6 元组 16

1.6.1 使用元组 16

1.6.2 使用序对 17

1.6.3 找直角三角形 18

第2章 相信类型 20

2.1 显式类型声明 20

2.2 haskell的常见类型 21

2.3 类型变量 22

2.4 类型类入门 23

2.4.1 eq类型类 24

2.4.2 ord类型类 24

2.4.3 show类型类 25

2.4.4 read类型类 25

2.4.5 enum类型类 27

2.4.6 bounded类型类 27

2.4.7 num类型类 28

2.4.8 floating类型类 28

2.4.9 integeral类型类 28

2.4.10 有关类型类的最后总结 29

第3章 函数的语法 30

3.1 模式匹配 30

3.1.1 元组的模式匹配 32

3.1.2 列表与列表推导式的模式匹配 32

3.1.3 as模式 34

3.2 注意,哨卫! 34

3.3 where?! 36

3.3.1 where的作用域 37

3.3.2 where中的模式匹配 38

3.3.3 where块中的函数 38

3.4 let 39

3.4.1 列表推导式中的let 40

3.4.2 ghci中的let 40

3.5 case表达式 41

第4章 你好,递归 43

4.1 不可思议的最大值 43

4.2 更多的几个递归函数 45

4.2.1 replicate 45

4.2.2 take 45

4.2.3 reverse 46

4.2.4 repeat 46

4.2.5 zip 46

4.2.6 elem 47

4.3 快点,排序! 47

4.3.1 算法思路 47

4.3.2 编写代码 48

4.4 递归地思考 49

第5章 高阶函数 50

5.1 柯里函数 50

5.1.1 截断 52

5.1.2 打印函数 53

5.2 再来点儿高阶函数 53

5.2.1 实现zipwith 54

5.2.2 实现flip 55

5.3 函数式程序员工具箱 56

5.3.1 map函数 56

5.3.2 filter函数 57

5.3.3 有关map与filter的更多示例 58

5.3.4 映射带有多个参数的函数 60

5.4 lambda 60

5.5 折叠纸鹤 62

5.5.1 通过foldl进行左折叠 63

5.5.2 通过foldr进行右折叠 63

5.5.3 foldl1函数与foldr1函数 64

5.5.4 折叠的几个例子 65

5.5.5 另一个角度看折叠 66

5.5.6 无限列表的折叠 67

5.5.7 扫描 68

5.6 有$的函数应用 68

5.7 函数组合 70

5.7.1 带有多个参数函数的组合 70

5.7.2 point-free风格 71

第6章 模块 73

6.1 导入模块 73

6.2 使用模块中的函数求解问题 75

6.2.1 统计单词数 75

6.2.2 干草堆中的缝纫针 76

6.2.3 凯撒密码沙拉 77

6.2.4 严格左折叠 79

6.2.5 寻找酷数 80

6.3 映射键与值 82

6.3.1 几乎一样好:关联列表 82

6.3.2 进入data.map 83

6.4 构造自己的模块 87

6.4.1 几何模块 87

6.4.2 模块的层次结构 89

第7章 构造我们自己的类型和类型类 91

7.1 定义新的数据类型 91

7.2 成型 92

7.2.1 借助point数据类型优化shape数据类型 93

7.2.2 将图形导出到模块中 94

7.3 记录语法 95

7.4 类型参数 97

7.4.1 要不要参数化我们的汽车? 99

7.4.2 末日向量 100

7.5 派生实例 102

7.5.1 相同的人 102

7.5.2 告诉我怎么读 103

7.5.3 法庭内保持秩序! 104

7.5.4 一周的一天 105

7.6 类型别名 106

7.6.1 使我们的电话本更好看些 107

7.6.2 参数化类型别名 108

7.6.3 向左走,向右走 109

7.7 递归数据结构 111

7.7.1 优化我们的列表 111

7.7.2 种一棵树 113

7.8 类型类 115

7.8.1 深入eq类型类 116

7.8.2 trafficlight数据类型 116

7.8.3 子类化 118

7.8.4 作为类型类实例的带参数类型 118

7.9 yes-no类型类 120

7.10 functor类型类 122

7.10.1 maybe函子 124

7.10.2 树也是函子 124

7.10.3 either a函子 125

7.11 kind与无名类型 126

第8章 输入与输出 128

8.1 纯粹与非纯粹的分离 128

8.2 hello, world! 129

8.3 组合i/o操作 130

8.3.1 在i/o操作中使用let 132

8.3.2 反过来 133

8.4 几个实用的i/o函数 135

8.4.1 putstr 135

8.4.2 putchar 135

8.4.3 print 136

8.4.4 when 137

8.4.5 sequence 137

8.4.6 mapm 138

8.4.7 forever 139

8.4.8 form 139

8.5 i/o操作回顾 140

第9章 更多的输入输出操作 141

9.1 文件和流 141

9.1.1 输入重定向 141

9.1.2 从输入流获取字符串 142

9.1.3 转换输入 144

9.2 读写文件 146

9.2.1 使用withfile函数 147

9.2.2 bracket的时间到了 148

9.2.3 抓住句柄 149

9.3 todo列表 149

9.3.1 删除条目 150

9.3.2 清理 152

9.4 命令行参数 153

9.5 关于todo列表的更多有趣的事 154

9.5.1 一个多任务列表 155

9.5.2 处理错误的输入 158

9.6 随机性 159

9.6.1 掷硬币 160

9.6.2 更多随机函数 161

9.6.3 随机性和i/o 162

9.7 字节串 165

9.7.1 严格的和惰性字节串 166

9.7.2 用字节串复制文件 167

第10章 函数式地解决问题 169

10.1 逆波兰式计算器 169

10.1.1 计算rpn表达式 169

10.1.2 写一个rpn函数 170

10.1.3 添加更多的操作符 172

10.2 从希思罗机场到伦敦 173

10.2.1 计算最快的路线 174

10.2.2 在haskell中表示道路系统 176

10.2.3 实现计算最佳路径的函数 177

10.2.4 从输入获取道路系统 179

第11章 applicative函子 182

11.1 函子再现 182

11.1.1 作为函子的i/o操作 183

11.1.2 作为函子的函数 185

11.2 函子定律 187

11.2.1 定律1 188

11.2.2 定律2 188

11.2.3 违反定律 189

11.3 使用applicative函子 191

11.3.1 向applicative问好 192

11.3.2 maybe applicative函子 192

11.3.3 applicative风格 193

11.3.4 列表 195

11.3.5 io也是applicative函子 197

11.3.6 函数作为applicative 198

11.3.7 zip列表 199

11.3.8 applicative定律 200

11.4 applicative的实用函数 201

第12章 monoid 205

12.1 把现有类型包裹成新类型 205

12.1.1 用newtype创建类型类的实例 207

12.1.2 关于newtype的惰性 208

12.1.3 type、newtype和data三者的对比 210

12.2 关于那些monoid 211

12.2.1 monoid类型类 212

12.2.2 monoid定律 213

12.3 认识一些monoid 213

12.3.1 列表是monoid 213

12.3.2 product和sum 214

12.3.3 any和all 216

12.3.4 ordering monoid 217

12.3.5 maybe monoid 219

12.4 monoid的折叠 221

第13章 更多monad的例子 224

13.1 升级我们的applicative函子 224

13.2 体会maybe 225

13.3 monad类型类 228

13.4 一往无前 229

13.4.1 代码,代码,代码 230

13.4.2 我要飞走 231

13.4.3 线上的香蕉 234

13.5 do记法 235

13.5.1 按我所说的去做 236

13.5.2 我皮埃尔又回来了 237

13.5.3 模式匹配和计算失败 238

13.6 列表monad 239

13.6.1 do记法和列表推导式 241

13.6.2 monadplus和guard函数 242

13.6.3 马的探索 243

13.7 monad定律 245

13.7.1 左单位元 246

13.7.2 右单位元 246

13.7.3 结合律 247

第14章 再多一些monad 249

14.1 writer?我没听说过啊! 249

14.1.1 monad赶来营救 251

14.1.2 writer类型 253

14.1.3 对writer使用do记法 254

14.1.4 给程序添加日志 255

14.1.5 低效的列表构造 257

14.1.6 使用差分列表 258

14.1.7 比较性能 259

14.2 reader?呃,不开玩笑了 260

14.2.1 作为monad的函数 261

14.2.2 reader monad 261

14.3 带状态计算的优雅表示 262

14.3.1 带状态的计算 263

14.3.2 栈和石头 264

14.3.3 state monad 265

14.3.4 获取和设置状态 267

14.3.5 随机性和state monad 268

14.4 墙上的error 269

14.5 一些实用的monad式的函数 271

14.5.1 liftm和它的朋友们 271

14.5.2 join函数 274

14.5.3 filterm 276

14.5.4 foldm 278

14.6 创建一个安全的rpn计算器 279

14.7 组合monad式的函数 281

14.8 创建monad 282

第15章 zipper 287

15.1 在树上移动 287

15.1.1 面包屑 290

15.1.2 向上走 291

15.1.3 处理焦点处的树 293

15.1.4 一路走到顶端,那里的空气既新鲜又干净 294

15.2 在列表上定位 294

15.3 一个非常简单的文件系统 295

15.3.1 为文件系统创建一个zipper 296

15.3.2 操作文件系统 298

15.4 小心行事 299

15.5 谢谢阅读! 301

 

图书信息来源:互动出版网

转载于:https://www.cnblogs.com/china-pub/p/3508871.html

这篇关于《Haskell趣学指南》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336374

相关文章

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2