自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (7)
  • 收藏
  • 关注

翻译 4.1 用 F# 绘制饼图

4.1 用 F# 绘制饼图 我们将开发一个绘制饼图的应用程序,如图 1 所示。这个应用程序从 CSV 文件(逗号分隔型取值格式,Comma Separated Values)中加载数据,为了计算数据源中的每一项的百分比,需要执行预处理;然后,绘制图表,用户能够以位图格式保存图表文件。我们可以使用库来显示图表(会在第十三章完成),但由我们自己来实现这些功能,能从 F# 代码中学到许多有关 F

2014-09-30 15:30:55 705

翻译 第四章 通过示例探索 F# 和 .NET 库

第四章通过示例探索 F# 和 .NET 库 本章介绍■使用通用 .NET 和 F# 库■实现第一个 F# 实用程序■用 F# Interactive 开发代码■从文件加载数据并绘制图表 到目前为止,虽然我们只学习了最基本的 F# 语言功能,但是,写一个简单的应用程序已经足够了。在这一章,我们不介绍任何新的函数语言结构,主要讨论用 F# 开发 .NET 应用程序的实际

2014-09-29 16:12:46 624

翻译 3.5 第三章小结

3.5 第三章小结 在这一章,我们通过实践探讨了基本的函数结构和技术。首先,用 let 绑定声明值和函数,知道了 F# 能够使必须的概念数量最小化,从严谨的数学观点来看,不可变值就是不带参数的函数。接下来,我们讨论了函数语言中最简单的不可变数据结构:元组,演示了不可变数据结构的用法。用不可变数据结构进行计算时,不能修改已有的实例,但可以复制原始值创建一个新的实例,用新计算的值替换那些[

2014-09-29 15:28:46 651

翻译 3.4.2 参数化函数的好处

3.4.2 参数化函数的好处 我们看另一个使用这个函数的示例,为了不同的目的,初看起来,完全不同于计算列表元素的和或积。让我们看看,是否能找出最大值: > aggregateList max (-1) [ 4; 1; 5; 2;8; 3 ];; val it : int = 8 作为第一个参数的函数(max),是内置的 F# 函数,返回给定的两个参数中大的。我们用-1

2014-09-29 11:42:06 1422

翻译 3.4.1.2 在 F# 中传递函数作为参数值

3.4.1.2 在 F# 中传递函数作为参数值 在 F# 中的函数 aggregateList 非常类似于我们已经实现的方法,但有一点重要的区别,F# 天然支持把函数作为参数值传递给其他函数,因此,不需要使用委托。在 F# 中,函数是特殊类型。类似于元组,函数的类型是由其他的基本类型构成。元组类型的代码表示,在元素的类型之间使用星号(例如,int * string);而函数的类型表示,

2014-09-29 09:53:56 1027

翻译 3.4.1.1 在 C# 中传递函数作为参数值

3.4.1 处理数字列表假设我们想写一个类似于 SumList 的方法,但是把加法改成乘法。这个修改看起来很简单:可以复制 SumList 方法,然后进行修改。其中只有两个变化:int MultiplyList(FuncList numbers) {  if (numbers.IsEmpty) return 1;    [1]  else return number

2014-09-28 17:59:08 6894

翻译 3.4.1 处理数字列表

3.4.1 处理数字列表假设我们想写一个类似于 SumList 的方法,但是把加法改成乘法。这个修改看起来很简单:可以复制 SumList 方法,然后进行修改。其中只有两个变化:int MultiplyList(FuncList numbers) {  if (numbers.IsEmpty) return 1;    [1]  else return number

2014-09-28 16:20:37 1005

翻译 3.4 函数也是值

3.4 函数也是值 在前一节中,我们讨论了不可变列表,学习了以递归方式处理列表。在本节,我们将看到函数编程中的另一个更重要概念:函数也是值。我们将看到这种方式使用函数,为什么如此有用,以及函数也是值到底意谓着什么。更多有关函数的内容将在第五章介绍。

2014-09-28 11:27:25 645

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

3.3.4.1 用 C# 求列表中数字的和 只要使用 C# 命令式编程,并处理过标准的 .NET 数组或来自 System.Collections.Generic 的 List 类,[ 写这个程序并不难, ]可能会创建一个变量total,并初始化为零,写一个 for 循环,迭代所有的数字,把每个元素加到 total 上(类似于 total + = list[i]);(或者,可以用 fore

2014-09-28 08:58:42 1082

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

3.3.4 处理函数式列表 到目前为止,我们已经讨论了函数式列表类型的外部特征,以及如何用 C# 实现,现在是时候写一些实际的代码,用函数式列表干睦什么了。例如,用 C# 实现方法 SumList(或 F # 中的 sumList 函数),对列表中的数求和。 3.3.4.1 用 C# 求列表中数字的和 只要使用 C# 命令式编程,并处理过标准的 .NET 数组或来自 Sys

2014-09-25 16:21:37 1732

翻译 3.3.4 处理函数式列表

3.3.4 处理函数式列表 到目前为止,我们已经讨论了函数式列表类型的外部特征,以及如何用 C# 实现,现在是时候写一些实际的代码,用函数式列表干睦什么了。例如,用 C# 实现方法 SumList(或 F # 中的 sumList 函数),对列表中的数求和。

2014-09-25 14:40:52 705

翻译 3.3.3 C# 中的函数式列表

3.3.3 C# 中的函数式列表 要了解函数式列表类型的工作原理,最好的办法是看看如何用 C# 实现同样的功能。有几种方法来表达列表可能为空,或者有头和尾。面向对象的解决方案可能是写一个抽象类 FuncList,它有两个派生类,比如,EmptyList 和 ConsCellList,分别表示种情况。为使代码尽可能简单,我们只使用一个类,有一个属性 IsEmpty,它会告诉我们这个实例是否包

2014-09-25 09:37:19 769

翻译 3.3.2.1 用模式匹配分解列表

3.3.2.1 用模式匹配分解列表 在 3.2.4 节,我们讨论有关元组的匹配模式时,看到两种不同的使用方法。一种方法是直接在 let 绑定中写出模式,即可以把表达式的结果分配给值,也可以在函数参数的声明中;另一种方法是使用 match 关键字。两者的重要区别在于,使用 match 可以指定多个模式,有多个分支。处理列表,我们需要使用第二种方法,因为在列表处理时,每次都要指定两个不同的分支

2014-09-24 16:17:19 798

翻译 3.3.2 函数式列表

3.3.2 函数式列表现在,我们已经适应了递归的一般概念,那么,可以详细地讨论函数式列表了。刚才我们提到过,列表可以为空,也可以由元素与另外的列表组成。因此,需要一个特殊的值来表示空列表,以及构建列表的方法,通过在已有列表的前面加上一个元素。第一个选项(空列表)有时称为 nil,第二个选项产生 cons cell(是构造列表单元的缩写,constructed list cell)。在图

2014-09-24 10:40:24 701

翻译 3.3.1 递归计算

3.3.1 递归计算 递归函数最常见的示例是计算一个数的阶乘。如果你不熟悉,这里有一个简单的定义:一个非负数 n 的阶乘,当 n 等于 1 或 0 时,等于1;对于更大的 n,等于 n-1 的阶乘乘以 n。这个函数的实现,基本上有两种方式。在 C# 中,可以使用 for 循环,数字在 2 到 n 之间进行迭代,用第次迭代的数乘以临时变量: int Factorial(int n)

2014-09-23 15:52:16 798

翻译 3.3 列表和递归

3.3 列表和递归 不可变的函数式数据类型,元组是一个很好的例子,但许多函数式数据类型,还有另外的属性值得在这一章讨论:递归(recursion)。有一个经典的编程笑话:递归的定义是什么?“递归,参见递归。”递归在函数编程中有不同的形式,它可以出现在类型的构造中,如列表。表示函数式列表类型,既可以为空,也可以由元素和列表组合而成。可以看到,我们描述的列表类型,递归用在了定义中。递归的第

2014-09-23 08:39:53 933

翻译 3.2.4 模式匹配元组

3.2.4 模式匹配元组 在前面的示例中,我们是在 let 绑定中用模式匹配分解元组的,清单 3.10 的代码可以稍微改进一下。我们实际上并不使用元组中的第二个元素,因此,只需要把第一个元素指定一个名字。在模式中把第二个值写成下划线,就可以做到,像这样: let (originalItem1, _) = tuple  下划线是一种特殊的模式,能匹配任何表达式,并且忽略赋给它

2014-09-22 17:05:59 1109

翻译 3.2.3 计算元组

3.2.3 计算元组 目前为止,我们还只是用这个示例创建和输出元组,现在,我们要对元组进行一些计算。假设去年增加大量的新生人口,我们就要增加居民人数。我们知道,元组类型是不可变的,因此,不可能设置 C# 元组类的属性。在 F# 中,有两个读元组值的函数(fst 和 snd),也没有设置值的函数,情况是类似的。因此,计算必须遵循通常的函数模式,通过复制初始元组返回新的元组,城市名不变,人

2014-09-18 15:16:46 1309

翻译 3.2.2.1 更好地推断 C# 元组类型

3.2.2.1 更好地推断 C# 元组类型 在继续之前,我们想展示了一个 C# 的技巧,它能使后面使用元组的示例更简明。在前面的示例中,我们必须调用构造函数,创建元组类型的实例,这就要求显式指定类型参数。我们用 C# 3.0 中新的 var 关键字,C# 编译器能够推断变量的类型,但是,我们还可以做得更好。C# 中还有另外一个地方支持类型推断:调用泛型方法。如果调用泛型方法,它的类型参

2014-09-16 22:27:51 796

翻译 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 1033

翻译 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 2857

翻译 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 878

翻译 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 1269

翻译 3.2 使用不可变数据结构

3.2 使用不可变数据结构 不可变数据结构(或对象),其值一经产生就不可改变。当声明一个包含一些值的数据结构,这些值存储在插槽(slot)中,比如字段或值的声明。在函数编程中,所有这些插槽都是不可变的,这导致了数据结构的使用也是不可变的。在本节,我们将演示最简单的内置的不可变数据类型,在后面的章节中会看到更常见的函数式数据结构。

2014-09-13 23:17:01 901

转载 $OEM$ 文件夹

下表描述了对 $OEM$ Folders 及其子文件夹的支持情况。 文件夹定义支持$OEM$ Folder包含用于自动安装或自定义安装的所有附加文件夹和文件。是$OEM$ Folders\Textmode包含安装文本模式(安装过程的一部分)期间所需的已更新的大容量存储驱动程序和硬件抽象层 (HAL)

2014-09-12 20:01:59 4475

翻译 3.1.3 声明可变值

3.1.3 声明可变值 在 3.1.1 节,我们声明过一个整数类型值,let number = 10。如果你很好奇,尝试进行修改,可能会写出类似 number = 10。这不起作用,因为在 F# 中,let 绑定之外的等于号只用于值的比较。代码虽然有效,但它可能会返回 false(除非 number 的值碰巧也是10)。在 F# 中修改已有的值几乎是不可能的。事实并非如此,因为 F#

2014-09-11 20:42:39 624

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

3.1.2.2 嵌套函数声明(NESTEDFUNCTION DECLARATIONS) 我们现在再看一个稍微复杂的函数声明,清单 3.3 演示了 let 绑定的另一个重要方面:嵌套。 清单 3.3 嵌套的 let 绑定 (F# Interactive) > let printSquares message num1 num2 = let printSquareUtili

2014-09-11 19:56:44 899

翻译 3.1.2.1 函数签名(FUNCTION SIGNATURES)

3.1.2.1 函数签名(FUNCTION SIGNATURES) 在前面示例中,我们还有一部分尚未讨论,即,F# Interactive 的输出,它告诉我们声明了一个新值,和推导出的类型。因为,我们声明的是函数,函数类型写作 int-> int-> int。这个类型表示函数有两个整型参数(在最后箭头符号前有两个 int),返回的结果是整型(在最后箭头符号后的类型)。我们已经知道,F# 使

2014-09-10 21:18:03 1337

翻译 3.1.2 函数的声明

3.1.2 函数的声明 正如我们在前面提到的,可以使用 let 绑定声明函数。我们用一个相当简单的函数来演示,实现两个参数的相乘。只要在 F# Interactive 中输入: > let multiply num1 num2 = num1 * num2;; val multiply : int -> int –> int 函数声明,必须在符号名的后面跟一个或多个参

2014-09-10 21:03:59 604

翻译 3.1.1 值的声明和作用域

3.1.1 值的声明和作用域 我们已经知道,可以使用 let 关键字声明不可变值。但尚未讨论值的范围域(scope),不过很容易用一个具体的示例来解释。清单 3.1 非常简单,但是,在这四行代码的后面到底隐藏了多少奥秘,我想你也一定会很惊讶。 清单 3.1 值的作用域 (F#) let number = 42    [1]printfn "%d" numberlet

2014-09-08 11:29:30 572

翻译 3.1 值和函数的声明

3.1 值和函数的声明 我们在第一章已经看到过几个值绑定的示例(在 F# 中用 let 关键字)。正如你将看到的,值绑定不只是值的声明,它是强大而常用的结构,既能声明局部和全局值,还能声明函数。我们在探索F # 中使用函数编程的示例之前,先看看值绑定。

2014-09-07 21:02:37 517

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

第三章 F# 和 C# 中元组、列表和函数 本章介绍■声明函数和值■使用不可变元组和列表■用递归处理列表■函数化处理函数 在第二章,我们从宏观上探讨了函数编程中最重要的概念,除了一些用来说明概念的简单示例之外,没有展示任何实际的函数式代码。到目前为止,我们的目标还是为了说明概念之间的关系,以及对编程来说结果完全不同。在这一章,我们终于开始写函数式的 F# 代码了

2014-09-05 16:11:32 882

原创 用 PowerShell 整理博客的目录

(

2014-09-04 21:55:05 977

翻译 2.5 第二章小结

2.5 第二章小结 在这一章,我们简要地讨论了有关函数编程的内容,包括 lambda 演算的数学基础;学习了函数编程语言的核心要素,如不可变性,递归,函数当成值使用。我们简要介绍了影响函数语言的设计,并且几乎在所有函数语言中都有一定程度体现的思想。这些思想包括,使语言可扩展,用声明式风格写程序,避免可变状态。虽然我们讨论的所有语言,主体都是“函数式”,但它们之间仍有重要差异,因为每种语言对

2014-09-04 17:51:58 587

翻译 2.4.4.1 度量单位(UNITS OF MEASURE)

2.4.4.1 度量单位(UNITS OF MEASURE) 1999 年,美国国家航空航天局(NASA)的气候卫星丢失,就是因为开发团队中部分成员使用公制,而另外有人使用英制的度量单位,部分成员希望距离用米、重量用公斤为单位表示,而其他成员却提供了英寸和磅的数据。这一事件是导致 F# 添加称为度量单位这项新功能的动机之一,它能够避免这种问题。我们将在第十三章讨论度量单位,这里,我们想要使

2014-09-04 15:30:19 1064

翻译 2.4.4 编译时检查程序

2.4.4 编译时检查程序 使用编译时类型化(using compile-time typing)的最大好处是能防止许多常见的错误,而且编译的代码运行更有效。在函数语言中,还有其他一些好处。最重要的是,类型能够指定定函数彼此之间如何组合。类型不仅能帮助写出正确的代码,而且提供了有价值的信息:■为开发人员来说,这是文档的一部分■对于 IDE 来说,在写代码时能够为输入提供有用的提示

2014-09-04 10:47:27 629

翻译 2.4.3 模式匹配(Pattern matching)

2.4.3 模式匹配(Pattern matching) 当使用函数数据类型时,我们知道得更多的是有关将要处理的这种类型的结构,这个属性有一很好的示例,就是差别联合。处理此类型时,我们肯定知道能得到什么类型的值(比如,在我们前面的示例中,它可能是矩形、椭圆或组合形状)。要写处理差别联合的函数,必须指定每种情况下程序应该做什么。这种结构可能在很多方面类似于 C# 中的 switch 语句

2014-09-03 20:35:32 2947

原创 MDT Utility 函数

MDT UiFunctionOutputoUtility.LocalRootPathReturns the path of the root folder being used by the deployment process on the target computer—for example, C

2014-09-03 19:22:08 737

翻译 2.4.2 差别联合类型(discriminated union type)

2.4.2 差别联合类型(discriminated union type) 在这一节,我们将关注差别联合(discriminated union)类型,它是一种基本的函数式类型。我们先用一个示例来说明了它的用处。假设要写一个处理形状图形的应用程序,我们将使用简化的形状表示,因此,就选择矩形、椭圆(由矩形边框的顶点定义),和由两个形状组合的形状。如果使用面向对象的概念考虑这个问题,

2014-09-02 17:30:09 1689

翻译 2.4.1 C# 和 F# 中的类型推断

2.4.1 C# 和 F# 中的类型推断 大多数的类型有简称,例如 int 或 Random,只有很少一部分需要类型推断,因为手写类型名称并不困难。C# 2.0 支持泛型,因此,可以构造更复杂的类型。在函数语言中的类型,像 F#,是相当复杂的,尤其是把函数当作值使用,因此,还必须有一种类型来表示函数。在 C# 3.0 中,可以对局部变量进行简单形式的类型推断。在C# 的早期版本中,声明

2014-09-02 16:19:07 1110

SQL.Server.2012.Integration.Services-2

SQL.Server.2012.Integration.Services

2012-04-20

SQL.Server.2012.Integration.Services

SQL.Server.2012.Integration.Services

2012-04-20

SQL.Server.2012.Administration-2

SQL.Server.2012.Administration

2012-04-20

SQL.Server.2012.Administration

SQL.Server.2012.Administration

2012-04-20

jQuery.1.4.Reference.Guide

jQuery.1.4.Reference.Guide

2010-02-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除