差别联合
文章平均质量分 65
心想才事成
这个作者很懒,什么都没留下…
展开
-
2.4.2 差别联合类型(discriminated union type)
2.4.2 差别联合类型(discriminated union type) 在这一节,我们将关注差别联合(discriminated union)类型,它是一种基本的函数式类型。我们先用一个示例来说明了它的用处。假设要写一个处理形状图形的应用程序,我们将使用简化的形状表示,因此,就选择矩形、椭圆(由矩形边框的顶点定义),和由两个形状组合的形状。如果使用面向对象的概念考虑这个问题,翻译 2014-09-02 17:30:09 · 1689 阅读 · 0 评论 -
6.4.3 分步分析(Evaluating)示例
6.4.3 分步分析(Evaluating)示例 能这像这样自信地使用高阶函数,是需要一些时间的,尤其是嵌套使用。我们将研究前面清单中的代码的地,通过跟踪几个样本输入。从抽象的问题“一般情况下这段代码做什么?”,到具体的问题“特定情况下这段代码做什么?”,通常可以帮助澄清真相。如果我们第一次输入一个无效的值,会发生什么。那时,从 readInput() 返回的第一个值将是 None。要翻译 2014-11-01 20:36:16 · 959 阅读 · 0 评论 -
5.3.2 使用可选值
5.3.2 使用可选值 到目前为止,我们已经看到如何声明差别联合类型,以及如何使用识别器创建值。现在,我们将学习如何写读取值的代码;看过之后F# 示例之后,我们将在 C# 中实现相同的功能,使用我们前面提到过的 Tag 属性的表示形式。翻译 2014-10-21 10:43:33 · 629 阅读 · 0 评论 -
5.3.1 F# 中的差别联合(discriminated unions)
5.3.1 F# 中的差别联合(discriminated unions) 在函数编程中,像这种突然出现的类型相当频繁,所以,函数语言倾向于使创建和使用类型更方便。在 F# 中,这种支持功能称为差别联合(discriminated unions)。与元组不同,差别联合必须事先声明,因此,在创建表示计划的值之前,必须声明这个类型,要有名字,最重要的是能够表示可选项。清单 5.3 显示了在 F翻译 2014-10-21 10:21:18 · 781 阅读 · 0 评论 -
5.3.2.2 用 C# 模拟差别联合
5.3.2.2 用 C# 模拟差别联合 接下来,我们要看一下同样的功能用 C# 如何实现。我们早先已经提到所有相关的类,因此,假设它们已经实现,因此,只看使用的代码。在本章的后面,我们将讨论另一个有关可选值的示例,包括完整的 C# 实现,因此,将会看到如何写 C# 类层次结构,具有与 F# 差别联合相同的属性。 提示 如果想要查看这个示例完整的源代码,包括类声明,可以从本书翻译 2014-10-21 16:10:19 · 729 阅读 · 0 评论 -
5.3.2.1 用 F# 匹配差别联合
5.3.2.1 用 F# 匹配差别联合 当使用差别联合时,必须要处理所有可能的选项,因为,我们不知道这个值到底表示哪一个选项。回忆一下以前类似的情况,处理列表时,问题要检查列表是否为空,我们是使用模式匹配实现的:match 构造能够根据几种模式检查值。我们可以用同样的功能,处理差别联合,只是这里模式换成了识别器。清单 5.5 是获取计划事件下一次发生时间的示例。 清单 5.5 计算翻译 2014-10-21 14:17:16 · 741 阅读 · 0 评论 -
7.3.1 转换表示
7.3.1 转换表示 在我们实现数的据类型之间,存在两个关键的不同:[两个不同,怎么出现三项]1、在新的表示形式中,文件是一个(递归)值,而在第一种情况下,是元素的列表。2、第 7.2 节的数据类型显式包含边框,指定内容的位置。3、第二个数据类型,只表示各部分是如何嵌套的。因此,当我们进行表示形式的转换时,需要计算每个嵌套部分的位置。这些差异影响转换函数的签名,在我翻译 2014-11-25 17:34:14 · 826 阅读 · 0 评论 -
7.3 表示结构化文档
7.3 表示结构化文档 在这一节我们所设计的数据结构,灵感来自 HTML 格式,这是我们熟悉的,成功创建文档的语言。就像 HTML 一样,我们表示的内容有几种类型,并且有些部分可能以适当的方法嵌套。图 7.3 显示了带注释的示例文档,它能给你格式包括哪些内容的概念。有两种不同的部分。简单的部分,如 TextPart 和 ImagePart,包含内容,但不包含嵌套的部分;在另一侧,Tit翻译 2014-11-25 15:23:13 · 1248 阅读 · 0 评论 -
6.7.1 用F# 实现列表
6.7.1 用F# 实现列表 虽然我们已经使用过 F# 中的列表,还用 C# 实现了相同的功能,但还没有研究如何用F# 实现列表类型。当我们前面讨论列表时,看到列表既可以表示为空值(nil)(空列表),也可以表示包含元素和引用列表其余部分的 cons cell。现在,如果我们回顾上一章中有关值的内容,这就像是有两个选项的可选值;微有一点稍不同,列表类型是递归的,因此,cons cell翻译 2014-11-18 14:48:45 · 920 阅读 · 0 评论 -
5.4.1 在 C# 中实现选项类型
5.4.1 在 C# 中实现选项类型 正如我们所看到的,在函数式编程中,选项(option)类型非常重要,我们也希望能够在 C# 中进行函数风格编程,因此,需要在C# 中实现适当的选项类型。我们已经讨论过如何用面向对象语言实现差别联合,这里代码的结构类似于我们前面讨论过的Schedule 类型。在Option 中,我们可以创建一个类(或值类型),有 HasValue 属性,虽然有点简单,但翻译 2014-10-22 15:51:41 · 1251 阅读 · 0 评论 -
5.4.2 F# 中的泛型选项类型
5.4.2 F# 中的泛型选项类型 F# 中的泛型类型本质上与 C# 中的泛型类相同,能够写更通用和可重用的类型。我们已经知道,在选项类型的情况中,就需要泛型,因为我们希望能够使用完全相同的泛型类型,创建带有不同类型的选项值。当然,我们要写出类型安全的代码,还需要知道这个选项类型到底带有哪种类型。正如在 C# 中,我们声明带有类型参数的类型,作为值类型使用,保存在 Some 可选值中。翻译 2014-10-22 16:46:37 · 808 阅读 · 0 评论 -
5.3.3 添加类型还是函数
5.3.3 添加类型还是函数 正如我们早先提到过的,在 F# 和 C# 中,函数式数据类型 Schedule 在一个方向不可扩展:很难为事件添加新的类型。在 F# 中,困难的原因在于需要修改类型声明,如果类型在共享库中,必须重新编译这个共享库;同样,在 C# 版本中,Tag 属性使得添加新类型更困难。另一方面,这种设计也有好处,能够很容易地添加新的功能处理计划。我们来看一下函数式和面向翻译 2014-10-21 17:12:59 · 682 阅读 · 0 评论 -
7.2 平面文档的表示
7.2 平面文档的表示 在这一章,我们将要开发一个用于显示文档的应用程序。首先设计文档的表示形式,适合于绘制在屏幕上。使用这种表示方式,文档就是元素的列表,其中包含一定内容(可以是文本,也可以是图像),和指定的边框,在边框中绘制具体内容。图7.1是一个文档的示例,有三个突出显示的元素。我们看一下用 F# 表示文档的数据结构。清单 7.4 引入了新的表示两种类型元素的差别联合,和新的表示翻译 2014-11-24 15:41:34 · 950 阅读 · 0 评论