首页 > 有用函数编程

有用函数编程

《序》

感谢

关于本书

关于封面

第一部分 学习函数式思维

  第一章 不同的思维

    1.1 什么是函数式编程?

    1.2 通往有用函数编程之路

    1.3 用函数式编程提高生产力

        1.3.1 函数范式

        1.3.2 声明式编程风格

        1.3.3 了解程序的执行

        1.3.4 设计并发友好的应用程序

        1.3.5 函数风格怎样形成代码

    1.4 函数式编程演示样例

        1.4.1 用声明式风格表达意图

            1.4.1.1 用 LINQ 处理数据

            1.4.1.2 用 XAML 描写叙述用户界面

            1.4.1.3 声明式函数动画

        1.4.2 理解使用不可变性的代码

             1.4.2.1 阅读函数式程序

        1.4.3 编写有效的并行程序

            1.4.3.1 并行化不可变程序

            1.4.3.2 使用 PLINQ 的声明式并行

    1.5 F# 简单介绍

        1.5.1 用 F# 写 Hello world

        1.5.2 从简单到有用

            1.5.2.1 从简单開始

            1.5.2.2 到稳健结束

    1.6 小结

   第二章 函数编程的核心概念

    2.1 函数编程的基础

    2.2 函数程序的计算       2.2.1 使用不可变值

       2.2.2 使用不可变数据结构

       2.2.3 用递归改变程序状态

       2.2.4 用表达式取代语句

       2.2.5 计算 (Computation by calculation)

    2.3 编写声明式代码

        2.3.1 函数也是值

        2.3.2 高阶函数(Higher-order functions)

            2.3.2.1 使用高阶函数扩展词汇

            2.3.2.2 面向语言编程(Language-oriented programming)

    2.4 函数式类型和值

        2.4.1 C# 和 F# 中的类型判断

        2.4.2 区别联合类型(discriminated union type)

        2.4.3 模式匹配(Pattern matching)

        2.4.4 编译时检查程序

            2.4.4.1 度量单位(UNITS OF MEASURE)

    2.5 第二章小结



    第三章 F# 和 C# 中元组、列表和函数

    3.1 值和函数的声明

        3.1.1 值的声明和作用域

        3.1.2 函数的声明

            3.1.2.1 函数签名(FUNCTION SIGNATURES)

            3.1.2.2 嵌套函数声明(NESTED FUNCTION DECLARATIONS)

        3.1.3 声明可变值

    3.2 使用不可变数据结构

        3.2.1元组类型(tuple)

            3.2.1.1 在 F# 中使用元组

            3.2.1.2 在 C# 中使用元组

        3.2.2 用 C# 实现元组类型

            3.2.2.1 更好地判断 C# 元组类型

        3.2.3 计算元组

        3.2.4 模式匹配元组

    3.3 列表和递归

        3.3.1 递归计算

        3.3.2 函数式列表

            3.3.2.1 用模式匹配分解列表

        3.3.3 C# 中的函数式列表

        3.3.4 处理函数式列表

            3.3.4.1 用 C# 求列表中数字的和

            3.3.4.2用 F# 求列表中数字的和

    3.4 函数也是值

        3.4.1 处理数字列表

            3.4.1.1 在 C# 中传递函数作为參数值

            3.4.1.2 在 F# 中传递函数作为參数值

        3.4.2 參数化函数的优点

    3.5 第三章小结



    第四章 通过演示样例探索 F# 和 .NET 库

    4.1 用 F# 绘制饼图

    4.2 用 FSI 编写和測试代码

        4.2.1 载入和解析数据

        4.2.2 计算数据

    4.3 创建控制台应用程序

    4.4 创建 Windows Forms 应用程序

        4.4.1 创建用户界面

        4.4.2 绘制图形

            4.4.2.1 创建随机颜色的画笔

            4.4.2.2 绘制饼图部分

            4.4.2.3 用函数画图

            4.4.2.4 绘制整个图表

            4.4.2.5 加入文本标签

        4.4.3 创建 Windows 应用程序

    4.5 第四章小结

    

第二部分 函数技术的基础

    第五章 局部使用函数值

    5.1 什么是值?

        5.1.1 基本类型、值类型和对象

        5.1.2 认识值和数据

    5.2 多值(Multiple values)

        5.2.1 F# 和 C# 中的多值

            5.2.1.1 用元组取代 out 參数

        5.2.2 元组类型和值的构造函数

        5.2.3 组合使用元组

            5.2.3.1 避免复杂的元组

    5.3 可选值(Alternative values)

        5.3.1 F# 中的区别联合(discriminated unions)

        5.3.2 使用可选值

            5.3.2.1 用 F# 匹配区别联合

            5.3.2.2 用 C# 模拟区别联合

        5.3.3 加入类型还是函数

        5.3.4 F# 中的选项(option)类型

            5.3.4.1 实现 F# 中简单的选项类型

    5.4 泛型值(Generic values)

        5.4.1 在 C# 中实现选项类型

        5.4.2 F# 中的泛型选项类型

        5.4.3 值的类型判断

            5.4.3.1 C# 3.0 中的类型判断

            5.4.3.2 F# 中的类型判断

        5.4.4 写泛型函数

    5.5 函数值

        5.5.1 Lambda 函数

            5.5.1.1 类型批注、动作和语句块(TYPE ANNOTATIONS, ACTIONS, AND STATEMENT BLOCKS)

        5.5.2 函数类型

            5.5.2.1 函数作为參数值和返回值

        5.5.3 多參数函数

            5.5.3.1 散函数应用(PARTIAL FUNCTION APPLICATION)

    5.6 第五章小结



    第六章 使用高阶函数处理值

    6.1 泛型高阶函数

        6.1.1 F# 中的泛型函数

        6.1.2 自己定义运算符

            6.1.2.1 在 C# 中模拟自己定义运算符

           6.1.2.2 F# 的管道运算符

    6.2 处理元组

        6.2.1 使用函数处理元组

        6.2.2 C# 中处理元组的方法

    6.3 处理计划

        6.3.1 处理计划列表

        6.3.2 在 C# 中处理计划

    6.4 处理选项类型

        6.4.1 使用 map 函数

        6.4.2 使用 bind 函数

        6.4.3 分步分析(Evaluating)演示样例

        6.4.4 实现选项类型的操作

           6.4.4.1 在 C#中使用选项类型

    6.5 使用函数

        6.5.1 函数组合

        6.5.2 C# 中的函数组合

    6.6 类型判断

        6.6.1 F# 中函数调用的类型判断

        6.6.2 自己主动泛型化(automatic generalization)

    6.7 处理列表

        6.7.1 用F# 实现列表

        6.7.2 理解列表函数的类型签名

            6.7.2.1 处理列表

        6.7.3 实现列表函数

            6.7.3.1 在 C# 中实现 fold

    6.8 通用处理语言

        6.8.1 映射、筛选和折叠(Mapping, filtering, and folding)

        6.8.2 列表的绑定操作

    6.9 第六章小结

    第七章 以数据为中心的程序设计

    7.1 函数式数据结构

        7.1.1 使用 F# 记录类型

            7.1.1.1 处理记录

        7.1.2 C# 中的函数式数据结构

    7.2 平面文档的表示

        7.2.1 绘制元素

        7.2.2 在窗口上显示画图

    7.3 表示结构化文档

        7.3.1 转换表示

        7.3.2 用 XML 表示文档

    7.4 写操作

        7.4.1 用映射操作进行更新

        7.4.2 使用聚合操作进行计算

    7.5 面向对象的表示方法

        7.5.1 用结构模式表示数据

            7.5.1.1复合设计模式(THE COMPOSITE DESIGN PATTERN)

            7.5.1.2 装饰设计模式(THE DECORATOR DESIGN PATTERN)

    第八章 以行为为中心的程序设计

    8.1 使用行为集合

        8.1.1 把行为表示为对象

        8.1.2 在 C# 中把行为表示成函数

        8.1.3 在 C# 中使用函数集合

        8.1.4 在 F# 中使用函数列表

    8.2 用于处理函数的习惯用语

        8.2.1 策略设计模式(The strategy design pattern)

        8.2.2 命令设计模式(The command design pattern)

            8.2.2.1 在 C# 中使用命令模式捕获状态

        8.2.3 在 F# 使用闭包捕获状态

            8.2.3.1 可变状态使用引用单元

            8.2.3.2 在闭包中捕捉引用单元

    8.3 使用组合行为

        8.3.1 函数的记录

        8.3.2 构建组合行为

        8.3.3 F# 代码的进一步演变

            8.3.3.1 C# 中的组合行为

    8.4 组合数据和行为

        8.4.1 决策树(Decision trees)

        8.4.2 F# 决策树

        8.4.3 C# 决策树

            8.4.3.1 模板方法模式

            8.4.3.2 函数式实现

    8.5 第八章小结



    第三部分 F# 高级编程技术

    第九章 把值转变成 F# 带成员的对象类型

    9.1 改进以数据为中心的应用程序

        9.1.1 加入成员到 F# 类型

        9.1.2 使用类型扩展追加成员

    9.2 改进以行为为中心的应用程序

        9.2.1 使用保存的函数记录

        9.2.2 使用接口对象类型

    9.3 使用 .NET 接口

        9.3.1 使用 .NET 集合

        9.3.2 用 IDisposable 接口清理资源

            9.3.2.1 用keyword use 编程

    9.4 详细的对象类型

        9.4.1 函数式和命令式类

        9.4.2 实现接口和类型转换

            9.4.2.1 在 F# 中实现接口

            9.4.2.2 F# 中的向上转换和向下转换(UPCASTS AND DOWNCASTS)

    9.5 在 C# 中使用 F# 库

        9.5.1 处理记录和成员

        9.5.2 使用值和托付

    9.6 第九章小结

    第十章 数据结构的效率

    10.1 优化函数

        10.1.1避免尾递归的堆栈溢出

            10.1.1.1 使用累加器參数

        10.1.2 使用记忆化缓存结果

            10.1.2.1 C# 和 F# 中可重用的记忆化

    10.2 处理大集合

        10.2.1 用尾递归避免栈溢出(续!)

        10.2.2 高效处理列表

            10.2.2.1 加入元素到列表

        10.2.3 处理数组

            10.2.3.1 以函数方式使用数组

            10.2.3.2 在 C# 中以函数风格使用数组

    10.3 连续(continuations)

        10.3.1 树处理的难点

        10.3.2 利用连续的代码

            10.3.2.1 使用连续处理树

    10.4 第十章小结

    第十一章 重构和測试函数式程序

    11.1 重构函数式程序

    11.1.1 重用常见的代码块

    11.1.2 跟踪依赖性和副作用

    11.1.2.1 使用可变数据结构

    11.1.2.2 使用不可变数据结构

    11.2 測试函数式代码

    11.2.1 从交互式控制台到单元測试

    11.2.1.1 在 F# 交互环境中測试程序

    11.2.1.2 在 F# 中写单元測试

    11.2.2 測试结构相等

    11.2.2.1 结构相等和比較

    11.2.2.2 測试列表

    强大的复制工具 Robocopy

    system 执行 cmd

    11.2.3 測试组合函数

    11.3 重构计算顺序

    安装 WIn8.1 创建用户问题

    11.3.1 不同的计算策略

    11.3.1.1 C# 和 F# 中的提前计算

    11.3.1.2 Haskell 的延迟计算策略

    11.3.2计算策略的比較

    11.3.3 用函数模拟延迟计算

    11.3.4 F# 中的延迟值

    11.3.4.1 实现或和延迟或

    11.3.5 为 C# 实现延迟值

    11.4 有用延迟值

    11.4.1 无穷列表

    11.4.2 在照片浏览器中缓存值

    11.4.2.1 使用延迟值进行缓存

    11.4.2.2 实现用户界面

    11.5 第十五章小结

    第十二章 序列表达式和可选工作流

    12.1 生成序列

    12.1.1 使用高阶函数

    12.1.2 在 C# 中使用迭代器

    12.1.3 使用 F# 序列表达式

    12.1.3.1 写序列表达式

    12.1.3.2 组合序列表达式

    12.2 掌握序列表达式

    12.2.1 递归的序列表达式

    12.2.2 无穷序列

    12.3 处理序列

    找不到符号

    12.3.1 用迭代器转换序列

    12.3.2 筛选和映射

    12.3.2.1 使用高阶函数

    12.3.2.2 使用查询和序列表达式

    12.3.3 平面映射(flattening projection)

    12.3.3.1 序列表达式中的平面映射

    12.3.3.2 直接使用平面映射

    12.3.3.3 在 C# 中使用平面映射

    把 Win 8.1 升级成 Windows 2012 R2

    12.4 可选工作流(alternative workflows)

    12.4.1 自己定义查询表达式

    12.4.2 自己定义 F# 语言

    12.5 自己定义计算的第一步

    12.5.1 声明计算类型

    12.5.2 写计算

    12.5.3 在 F# 中实现计算生成器

    12.5.4 在 C# 中实现查询操作

    不急不躁修硬盘

    12.6 实现选项的计算表达式

    12.7 给计算添加日志记录

    12.7.1 创建日志记录计算

    12.7.2 创建日志记录计算

    12.7.3 使用计算表达式进行重构

    12.8 第十二章小结











转载于:https://www.cnblogs.com/yangykaifa/p/6880177.html

更多相关:

  • 草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...

  • 前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...

  • 1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态。1.1.2函数的作用函数是组织好的,可重复使用的,用来...

  • 原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...

  • 在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...

  • nan 是not a number ,inf是无穷大 numpy.nan_to_num(x): 使用0代替数组x中的nan元素,使用有限的数字代替inf元素...

  • 简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念.Utilities Reference  演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。Graphics Reference  图形化示例展现的是 CUDA, OpenGL,...

  • 在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。...

  • 我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。 基本思路可以完全照搬参考文献[2][3] 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL...

  • 该博文整理一些在使用stl编程过程中遇到的小经验: 1.在多线程环境下面打印调试,如何使用cout及时刷新到屏幕上? 在C中我们经常这样使用: printf("Hello World "); fflush(stdout); 如果使用stl,我们可以这样使用: cout << "Hello World" << endl <...

  • Python 与 ABC 的一个重要区别在于其类型系统。ABC 采用静态类型,编译器会检查程序中的变量类型是否保持一致,如果不一致,程序就无法运行。并且,ABC与当时大多数静态语言不同,采用的是类型推导(和 Haskell 一样),而不是类型声明(比如 C 语言)。而 Python 采用动态类型,所有类型检查都是在程序运行过程中,而不...

  • python是计算机二级考试的科目之一,并没有级别的划分。其考试目标是测试考生掌握Python语言知识的程度和对Python语言的编程能力、调试能力和综合应用能力,在当下的应用中是十分重要的。 什么是python Python语言是一种解释运行、面向对象、扩展性强的程序设计语言,是大学生学习计算机编程能力、理解计算机解决问题的方法的...

  • 正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1)空指针所对应的是指指向的对象为空的指针。            不经发问,什么叫指向为空呢?要理解这点,必须理解如下几点(有点啰嗦,但...

  • 一、reponseType 1、什么是reponseType XMLHttpRequest.reponseType属性是一个枚举类型的属性,返回响应数据的类型,他允许我们手动的设置 返回数据的类型。如果我们将它设置为一个空字符串,它将默认的使用"text"类型。 当将reponseType设置为一个特定的类型的时候需要确保服务...

  • SNMP中,数据类型并不多。这里我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。INTEGER一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志就只有允许转发时的或者不允许转发时的这两种),有些整型变量定义一个特定的范围(例如,UDP和TCP的端口号...