
元组
文章平均质量分 70
心想才事成
这个作者很懒,什么都没留下…
展开
-
6.2.2 在 C# 中处理元组的方法
6.2.2 在 C# 中处理元组的方法 在本节中,我们将处理来自第 3 章的泛型 Tuple 类,添加类似于我们刚才在 F# 中看到的功能。清单 6.6 显示了高阶函数 mapFirst 和 mapSecond 的 C# 版本。 Listing 6.6 Extension methods for working with tuples (C#) public sta翻译 2011-05-10 10:37:00 · 1130 阅读 · 0 评论 -
4.2.2 计算数据
4.2.2 计算数据 在这个应用程序的第一个版本中,我们将只打印标签,以及图表中每一项所占比例(百分比)。要计算百分比,就需要知道列表中所有项目数值总和,这个值用清单 4.4 中的函数 calculateSum 来计算。 清单 4.4 计算列表中的数值和 (F# Interactive)> let rec calculateSum(rows) = matchrows翻译 2014-10-11 09:49:28 · 822 阅读 · 0 评论 -
6.2.1 使用函数处理元组
6.2.1 使用函数处理元组 在第三章,我们用元组来表示城市和人口。当我们想增加人口时,写的代码像这样: let (name, population) = oldPraguelet newPrague = (name, population + 13195) 这很清晰,但有点罗唆。第一行分解元组,第二行对第二个元素进行计算,然后,生成新的元组。理论上,我们可能说,对分解翻译 2014-10-30 14:01:21 · 881 阅读 · 0 评论 -
4.4.2.3 用函数绘图
4.4.2.3 用函数绘图 DrawStep 函数的第一个参数是两个绘图函数中的一个,我们暂时先给这个绘图函数的类型命名为 DrawingFunc,以后再定义。在讨论其余的参数之前,我们先看一下这个函数的签名: drawStep : (DrawingFunc * Graphics * float* (string * int) list) -> unit 我们再次使用元组语翻译 2014-10-15 11:34:07 · 915 阅读 · 0 评论 -
5.2.1 F# 和 C# 中的多值
5.2.1 F# 和 C# 中的多值 在第三章讨论元组时,我们用 C# 实现了一个 Tuple 类,与 F# 中的元组有同样的行为。使用元组不是从 C# 的方法中返回多值的通常做法,虽然以函数方式写 C# 代码仍然有用。如果在 C# 中写这个程序,不使用元组,或者不为每一个返回多值的方法声明新的类,可能会使用 out 参数。清单 5.1用一个简单的函数,带余数的除法,演示了这两种方法。翻译 2014-10-17 15:04:11 · 856 阅读 · 0 评论 -
6.2 处理元组
6.2 处理元组 我们从第三章第一个函数式代码开始,一直以来都在使用元组,应该已经相当熟悉了。但是,我们还没看看如何使用高阶函数来处理元组。元组确实很简单,因此,通常直接使用,但在某些情况下,代码可能并不如想像的简单。讨论高阶函数,元组是一个好起点,正是由于简单。我们在这里讨论的原则同样适用于其他类型。翻译 2014-10-29 08:44:09 · 542 阅读 · 0 评论 -
6.2.2 C# 中处理元组的方法
6.2.2 C# 中处理元组的方法 在本节,我们将继续处理第三章的泛型 Tuple 类,添加类似于刚才在 F# 中看到的功能。清单 6.6 就是高阶函数 mapFirst 和 mapSecond 的 C# 版本。 清单 6.6 处理元组的扩展方法 (C#)public static class Tuple { publicstatic Tuple MapFirst翻译 2014-10-30 14:36:16 · 1033 阅读 · 0 评论 -
6.8.1 映射、筛选和折叠(Mapping, filtering, and folding)
6.8.1 映射、筛选和折叠(Mapping,filtering, and folding) 映射、筛选和折叠是函数编程中最常见的操作;在处理函数式列表时,我们已经用到过,但它们还支持所有其他的集合类型(我们将在第十和十二章讨论其中一部分);这些操作并不限于集合,所有的操作都可用于处理选项类型。清单 6.25 显示了映射、筛选和折叠函数的签名类型,清单中包括了我们尚未讨论过的Optio翻译 2014-11-20 10:30:12 · 919 阅读 · 0 评论 -
5.2.1.1 用元组代替 out 参数
5.2.1.1 用元组代替 out 参数 如果确实想,那么,F# 也可以使用 out 参数,但是,元组通常是首选,因为,F# 自动将有 out 参数的 .NET 方法暴露成返回元组的方法,因此,不需要做任何事情,完全是透明的。这就是说,F# 代码看起来仍然像惯用的函数代码,即使调用的.NET 代码没有元组的概念。在 .NET 中,最广泛使用的、有 out 参数的方法可能是 TryParse翻译 2014-10-17 15:26:44 · 763 阅读 · 0 评论 -
5.2.3 组合使用元组
5.2.3 组合使用元组 当考虑从函数应返回什么样的元组时,关注的主要问题是可组合性(compositionally),即期望如何使用元组?其他哪些函数可能会使用相同类型的元组?与程序中其他的类似情况保持一致吗?我们用一个示例来演示,将使用两种的方法,表示前面示例中的屏幕坐标和消息,假定已经有一个输出消息的函数printMessage,因此,这里就会省略其定义,函数的声明可能像这样:翻译 2014-10-20 11:28:00 · 616 阅读 · 0 评论 -
5.2.2 元组类型和值的构造函数
5.2.2 元组类型和值的构造函数 我们已经知道元组值的类型是什么样子,在清单 5.1 再次看到。写元组类型使用星号,例如,保存整数和字符串的元组类型,写成 int * string。在这一章的概论部分,谈到值和类型时,我们说过,类型是所有可能值的域。如果用这种观点来审视元组类型:这种表示方法如何反映了元组类型是由几个基本类型组成的呢?在这种表示方法中的星号是关键,因为它承担了类型构造翻译 2014-10-20 10:17:44 · 555 阅读 · 0 评论 -
5.2.3.1 避免复杂的元组
5.2.3.1 避免复杂的元组 很明显,返回有很多元素的元组,wf 使代码难以阅读;在 F# 中,可以用记录类型代替有太多元素的元组。记录提供了一种简单方法,创建有标记成员的类型;记录通常用于保存程序数据,我们将在第七章谈论。基于函数返回类型中元素的数目,使函数难以使用的观点,也因人而异,但我们建议,避免返回的元组有三、四个以上的元素。当然也有例外,在开发的早期,使用大的元组原型可能是翻译 2014-10-20 14:05:26 · 653 阅读 · 0 评论 -
4.2.1 加载和解析数据
4.2.1 加载和解析数据 作为第一步,我们将实现一个函数 convertDataRow,从 CSV 文件中取一行作为字符串,把这一行拆成两部分,以元组形式返回。函数实现后,就可以立即进行测试,输入一个样本(字符串"Test reading,1234”),应该能够正确解析。清单 4.2 是函数的代码和测试结果。 清单 4.2 解析 CSV 文件的一行 (F# Interactive翻译 2014-10-09 17:20:39 · 750 阅读 · 0 评论 -
5.5.3 多参数函数
5.5.3 多参数函数 我们回顾一下,写函数时的选项。在 F# 中,当写的函数有多个参数时,可以使用元组。下一个示例以这种风格写的函数,计算两个整数的和;我们将使用 lambda 函数语法,但在 F# 中,也可以使用简单的 let 绑定,得到同样的结果: > let add = fun (a, b) -> a + b;;val add : int * int -> int翻译 2014-10-24 19:22:06 · 809 阅读 · 0 评论 -
6.2.1 使用函数处理元组
6.2.1 使用函数处理元组 在第 3 章,我们用元组来表示城市和人口。当我们想要增加人口时,不得不写点东西,像这样: let (name, population) = oldPrague let newPrague = (name, population + 13195) 这很清晰,但有点罗唆。第一行分解元组,第二行对第二个元素执行计算,然后,生成新的翻译 2011-05-09 21:13:00 · 464 阅读 · 0 评论 -
6.2.1 使用函数处理元组
6.2.1 使用函数处理元组 在第 3 章,我们用元组来表示城市和人口。当我们想要增加人口时,不得不写点东西,像这样: let (name, population) = oldPrague let newPrague = (name, population + 13195) 这很清晰,但有点罗唆。第一行分解元组,第二行对第二个元素执行计算,然后,生成新的翻译 2011-05-09 21:13:00 · 376 阅读 · 0 评论 -
6.2 处理元组
6.2 处理元组 我们从第 3 章第一个函数代码起,一直以来都在使用元组,已经相当熟悉了。但是,我们还没看看如何使用高阶函数来处理元组。元组是很简单的,因此,可以经常直接使用它们,但在某些情况下,代码可能并不精简。对于探索高阶函数,元组是一个好的起点,因为,它们是那么简单。我们在这里看到的原则也适用于其他类型。翻译 2011-05-09 14:32:00 · 390 阅读 · 0 评论 -
返回元组
返回元组首先,我们讨论为什么应该避免使用元组。如果函数返回元组,用户就必须引用 FSharp.Core.dll;另外,需要使用元组的代码C# 中看并不好。考虑下面的例子,我们定义了函数 hourAndMinute,它从结构 DateTime 中返回时、分。#lightmodule Strangelights.DemoModuleopen System/翻译 2014-06-20 16:03:43 · 1904 阅读 · 0 评论 -
3.2.3 计算元组
3.2.3 计算元组 目前为止,我们还只是用这个示例创建和输出元组,现在,我们要对元组进行一些计算。假设去年增加大量的新生人口,我们就要增加居民人数。我们知道,元组类型是不可变的,因此,不可能设置 C# 元组类的属性。在 F# 中,有两个读元组值的函数(fst 和 snd),也没有设置值的函数,情况是类似的。因此,计算必须遵循通常的函数模式,通过复制初始元组返回新的元组,城市名不变,人翻译 2014-09-18 15:16:46 · 1369 阅读 · 0 评论 -
3.2.4 模式匹配元组
3.2.4 模式匹配元组 在前面的示例中,我们是在 let 绑定中用模式匹配分解元组的,清单 3.10 的代码可以稍微改进一下。我们实际上并不使用元组中的第二个元素,因此,只需要把第一个元素指定一个名字。在模式中把第二个值写成下划线,就可以做到,像这样: let (originalItem1, _) = tuple 下划线是一种特殊的模式,能匹配任何表达式,并且忽略赋给它翻译 2014-09-22 17:05:59 · 1137 阅读 · 0 评论 -
3.2.1元组类型(tuple)
3.2.1元组类型(tuple) F# 中最简单的不可变数据结构是元组2类型。元组是一种简单类型,它把几个(可能是)不同类型的值组合在一起。下面的示例创建了一个值,它包含了组合在一起的两个值: > let tp = ("Hello world!",42);;val tp : string * int 创建元组值相当简单:值列表括在括号内,以逗号分隔。我们仔细地看一下代翻译 2014-09-14 10:53:22 · 1291 阅读 · 0 评论 -
3.2.1.1 在 F# 中使用元组
3.2.1.1 在 F# 中使用元组 让我们看一个更复杂的 F# 使用元组的代码。在清单 3.5 中,使用元组存储有关城市的信息。第一个成员是字符串(城市的名字),第二个成员是整数,包含住在城市的人口。我们实现的函数 printCity,输出城市名字与人口的消息,最后,创建两个城市并打印有关信息。 清单 3.5 使用元组 (F# Interactive) > let p翻译 2014-09-14 16:46:45 · 908 阅读 · 0 评论 -
3.2.1.2 在 C# 中使用元组
3.2.1.2 在 C# 中使用元组 我们说过,如果使用 .NET 4.0,可以使用现成的泛类型,Tuple,来自 System 命名空间。我们要看一下如何实现类似的简单类型。在任何情况下,我们将使用的类型有一个构造函数,它有两个参数,类型分别是 T1 和 T2;不像在 F# 中,可以用函数 fst 和 snd 访问元素,因此,在 C# 中,还有两个属性用于访问成员的值,我们将使用属性翻译 2014-09-16 20:42:08 · 2887 阅读 · 0 评论 -
3.2.2 用 C# 实现元组类型
3.2.2 用 C# 实现元组类型 System 命名空间中实际的 Tuple 类型更复杂一点,但是,我们可以很容易实现在这一章中所需要的功能。我们对其命名与 .NET 类型相同,因此,如果不使用 .NET 4.0,在所有的示例中可以使用我们[这里]所实现的[元组]。清单 3.7 是完整的代码。 清单 3.7 实现清单类型 (C#) public sealed class翻译 2014-09-16 21:05:36 · 1094 阅读 · 0 评论 -
6.5.1 函数组合
6.5.1 函数组合 处理函数最重要的操作,就是组合。先看一个示例是非常有用的,这个示例用元组保存(城市的)名字和人口。在清单 6.16 中,我们创建一个函数,根据人口的规模,确定是城市、镇,还是村;同时用保存在列表中的几个地方测试确定状态。 清单 6.16 处理城市信息 (F# Interactive)> let places = [("Grantchester", 552)翻译 2014-11-11 18:48:15 · 1134 阅读 · 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 · 807 阅读 · 0 评论