自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fsharp_net的专栏

注:等同于http://www.cnblogs.com/tryfsharp

  • 博客(53)
  • 收藏
  • 关注

翻译 F# 2.0 & F#是什么

F# 2.0 及 F# 是什么[注意,如果你想使用免费下载的F#2.0,你应该使用2010年8月发布的F#2.0免费下载的MSI和ZIP。这个版本将现有可免费使用的F#的编程工具扩展到了.NET 4.0。]4月12日在世界各地举办了第五个Visual Studio 2010发布会,正像Bob Muglia, Jason Zander 和S. Somasegar和在拉斯维加斯的现场直

2011-12-20 11:02:22 1120

原创 如果类是个泛型类的话dllImport 代码不能编译

你可能需要在dllImport代码中使用泛型类。但是你知道下面的代码段能通过编译么?open System.Runtime.InteropServices type B() =    member this.F() = () module A =    ["aa")>]externvoid AA(B a)答案是否定的。注意最后一行将抛出一个错误:Un

2012-06-08 17:03:41 1895

原创 注意:我们不能在模式匹配中放入lambda 表达式

以下代码在VS2012中不能通过编译,你知道么?知道为什么么?let f0 x = x % 2 = 0let f1 x = x % 2  let ( | Even | _ | ) f (x:int) =if f(x) thenSome(Math.Sign(x))else Nonelet ( | Odd | _ | ) f (x:int) =if f(x) thenS

2012-06-08 17:01:46 1833

原创 F# 智能感应在某些情况下不能工作

在现在的Visual Studio 2012中,F#智能感应有时候在某些情况下不能工作。那么在何种情况下它会不工作呢?可以绕过去么?让我来告诉你详细情况吧。请看如下代码:open System.Collections.ObjectModel module PortableLibrary1=    type Keys=    | One = 1    | Two

2012-06-08 16:59:40 1651

翻译 F#与数学(Iv) - 泛型数字代码

泛型数字代码是能够被用来处理多种不同数字类型包括像int 型, decimal型 和float型或者甚至是我们自己的数字类型的一些计算(比如此系列的前篇文章中的时钟运算)。泛型数字代码区别于普通的F#泛型代码像'a 链表类型 或者List.map函数, 因为数字代码使用数字操作符, 比如为每个数字类型而区别定义的+或者 >=。当编写有一些参数类型 'T的简单泛型代码的时候, 对于参数的类型我们

2012-06-01 13:48:28 2659 1

翻译 F# ≥ C#(活动模式 和枚举)

F#提供了一个叫"活动模式"的有趣功能。它把输入的数据转换成其他不同的东西。一个有趣的使用实例就是代替枚举。但我编程枚举的时候,我总不高兴去链接枚举项到它的定义。例如,下面的枚举定义了 数字枚举,enum Numbers{    Odd,    Even,}但是它没有说明什么是Odd,什么是Even。我试着使用特性或简单的注释,但是我真正想得到的是在F#中见到枚举项就获

2012-06-01 13:31:58 2049

翻译 Window Phone上的F# - 图形计算器

最近在西雅图F#小组期间,我被问到怎样用F#来做windows phone calculator。若是你知道F#,它并不难。计算器的骨干就是一个字符串解析器。它能被从头开始写或者用已有的东西来写。既然我想投入生产而不是准备一个面试,那么我选择使用F# powerpack提供的已有的yacc解析器。如果我把前后端的yacc分析器结合起来,大部分工作就完成了,余下的就是去补下你的yacc\le

2012-06-01 13:18:10 1823

翻译 F#互操作中的一招

当我尝试破解.CAB文件的时候, 我发现F#里面的COM交互不同于C#。在从"COM"选项卡增加了"Microsoft Shell Controls And Automation"之后,C#里面的实例代码像下面的代码。bool ExpandCabFile(string CabFile,string DestDir)    {      if (!Directory.Exists(D

2012-06-01 13:13:40 1600

翻译 Type Provider - 通过 给一个自定义基类共享信息

我有一个坏习惯,对我来说,忘记它不是很容易。昨天晚上,这个小怪物又来困扰了我。可能我不能解决之前的问题,相反我被引诱到一片新领土。昨天晚上,这个怪物提醒了我单元测试 type provider, 使我想到怎样在不同的type provider方法间共享信息。目前的type provider的方法调用是独立的, 几乎没有如何维护一个内部状态的例子。正则表达式type provider是一个例子。

2012-06-01 12:57:24 2461

翻译 F#3.0自动地实现属性

F#3.0实现了几个新的功能:Automatically Implemented Property(AIP).这简化了在类型定义里面的属性声明,但不仅仅是这些。 基本的AIP是,用更简明的语法,你就能定义一个属性。下面的MyProperty是一个AIP. typeMyType() =classmembervalMyProperty = 0 with get, set

2012-05-24 11:41:40 1659

翻译 F# 3.0 CLIMutable特性

如果你曾经用一些设计器支持使用过XAML,那么你将额外地受益于设计器所带来的好处。我已经花费了数周,不用实现任何功能和设计器支持的工作。这里描述了一个案例。默认的构造函数是关键!不幸地是,F#里面的 record类型没有一个默认的构造函数,这使绑定变得困难。 现在我们有CTlMutable来解决这个问题。CTlMutable截屏如下: 如果你定义下面的F#代码:[ ]t

2012-05-24 11:30:36 1588

翻译 F#和C#里面的NULL 值

首先,NULL对于F#类型来说是不允许的值,这在某种意义上是好的,但是由此也带来了麻烦。 第一个需要可能是:忘记所有关于option和NULL的参数,我需要NULL,那是我编程的方式。那么好。你可以使用你允许它为NULL的类型的[]特性。 真正走进F#的人们同意使用option是一个更好的选择。然而,这种限制使F#很难和C#程序交流。例如,你想从C#里面使用F#库。你真的能够禁止C

2012-05-24 11:06:12 2027

原创 模式匹配的类型测试不能识别List<’a>

我在Visual Studio论坛上读过一个很有趣的论坛帖子,内容大致是这样的:当试图测试一个obj对象是否是一个空的list,我们不能用模式匹配的类型测试来达到目的,具体代码如下:let empt (o: obj) =     match owith     | :? List as l when l.IsEmpty->true     | _ ->false编译

2012-05-17 10:05:31 1603

翻译 F#与数学(III) – 自定义数字类型(PartIII)

用全局关联来支持矩阵我们的数字类型可以被用在一些标准的库函数如List.sum中,因为它们实现一些被List.sum必需的静态成员约束的成员。然而,这种方法对复杂的数据类型如泛型矩阵不工作。如果我们试图用我们的类型写任意矩阵计算,这将是不工作的,因为泛型矩阵类型不能自动的使用我们提供的重载操作符和成员。为了支持矩阵我们需要提供所谓的数值关联。它是个简单的接口,包含了我们的类型上能被执行的数

2012-04-27 13:00:09 1493

翻译 F#与数学(III) – 自定义数字类型(PartII)

交互地测试数字类型下一步,我们将用F#交互来验证我们所写的代码到目前为止是按预期工作的。在这一点上,我们甚至没有生成库。我们仅仅写了一些F#的源代码,想不生成库来测试这些源代码。我们将使用在F#脚本文件中写入的交互式测试。一旦你建立了库,就可以很容易地用NUnit,XUnit或者其他测试框架把它们转变成相应的单元测试。为了测试我们在源代码级别实现的类型,我们先添加一个新的名为Test.fs

2012-04-27 12:51:27 1758

翻译 F#与数学(III) – 自定义数字类型(PartI)

本章中,我们定义用于模算术运算[1](也称为时钟运算)的F#数字类型。模算术用于当我们想保留一个通过循环计算在指定范围内的值。例如,时钟的最大值为12小时。当我们将11小时和3小时相加的时候,数值会溢出,结果就为2小时。且别说时钟,这种数字系统对密码学,音乐等也是必需的。本文介绍了几种在F#中定义任何新的数字类型时必不可少的技术。更重要的是,你将学会如何:::  用重载运算符定义一个数字类

2012-04-27 11:26:49 1824

翻译 Visual F# 3.0 Beta 介绍

就像Jason Zander在他的博客里公布的那样,Visual Studio 11 Beta现在已经可以下载了!这个版本包含F# 3.0的Beta版,此F# 3.0介绍了F#信息富态编程 Beta版本发布了一些新的F#特性,包括:可移植库支持,加强的Type Providers,改善的智能感应,以及支持任意CPU的FSI版本。我们也已经更新了F# 3.0 Beta的例

2012-03-31 15:29:52 2509

翻译 F#与数学(II) – 在图形算法中使用矩阵(PartIII)

其他矩阵操作我们将简单的介绍一些F# PowerPack中提供的关于矩阵的有用的函数与操作符用来总结这部分内容。下面的列表给出了一组相似函数的使用示例。逐点操作Matrix.cptMaxMatrix.cptMinOperators: + and .*matrix -> matrix -> matrix这些函数与操作对作为参数传入的两个矩阵的对应元素执

2012-03-21 16:03:15 2238

翻译 F#与数学(II) – 在图形算法中使用矩阵(PartII)

使用矩阵Matrix是一种可变类型,因此它可以在创建后被修改。当你必须要修改矩阵式,最好的方法就是一次性的修改,修改后将之视为不可变的(例如:当矩阵作为函数结果被返回时,而此函数是使用可变性来实现的)。这样的话,你会在构造是得到好的性能,同时你可以保持代码的其余部分透明地引用它。 用序号访问矩阵元素下面的代码展示了直接创建一个4x4的邻接矩阵的方法,此邻接矩阵来自于本文介绍部分所讨

2012-03-21 15:47:02 1745

翻译 F#与数学(II) – 在图形算法中使用矩阵(PartI)

在本系列的上篇文章中,我们了解了complex和BigRational类型,它们都是位于F# PowerPack中的数字类型。除了这两种,PowerPack库也包含了一种名为matrix的类型,此类型表示一种由浮点数组成的二维矩阵。 在这篇文章中,你将学会在F#中如何使用矩阵,如何使用F#PowerPack中提供的相关函数。我将用一个例子来介绍此语言库,此例子使用所谓的邻接矩阵来展示图

2012-03-21 15:41:58 2104

原创 F# 入门(十三):Record(记录)

Record在F#中是一种很重要的用来存贮数据的结构.它与元组和F# 中的枚举(DiscriminatedUnions)差不多,但是又有比他们更方便的地方,如:我们可以很轻松的访问Record中的每个元素的值,而不需要如元组那样做更多的操作才可取得。下面我们看看Record的定义及与之相关的操作Record的定义我们使用type 关键字来定义Record,如我们定义一个名为myReco

2012-03-14 11:02:44 2057

原创 F# 入门(十二):Tuple(元组)

元组是F#中特有的一种数据类型,一种非常方便的数据类型,类型为System.Tuple。它是一些值的组合,通过逗号来分隔每个元素,元素可以是任何的数据类型。 元组和链表的区别:链表:元素的个数是可变的,但元素必须是相同的数据类型。元组:元素的个数是固定的,元素的类型可以是不同的数据类型。使用元组的一个好处就是,如果用元组来作为函数的返回值进行返回,就可以很方便地从一个函数中

2012-03-07 15:28:28 746

翻译 F#与数学(I) – PowerPack中的数字类型

在这篇文章中,我们将简单地看看F# PowerPack中可用的两种数字类型。Complex类型代表由实数部分和虚数部分组成的复数。两部分数字都是以浮点型数据存储的。类型BigRational表示由任意大小的分子与分母组成的有理数。任意大小的整数则是由从.NET4.0就可用的BigInterger类来表示的(位于System.Numerics.dll程序集中)。在.NET2.0中,BigIntger

2012-02-27 15:18:44 1030

原创 F# 入门(十一):链表与数组

链表和数组都是数据的集合。F#的链表是线性列表的一种,单方向链表,它是基本数据结构之一,一种携带指向下一个元素的指针的数据结构。链表中的元素必须是同类型的数据类型。而数组与链表很相似,但它可以使用数组索引来访问到数组中的某个元素。同时,它的元素也必须全部是同类型的数据类型。 链表的写法是用[]来表示,同时元素用";"来分隔。当然不用";"分隔情况也是有的。请看下面的一些例子:

2012-02-27 10:39:49 702

原创 F# 入门(十):mutable关键字

F#中的变量的值在声明初始化后就不可以被修改了。但如果想使用可变的变量时,用mutable关键字修饰变量就可以被修改了。 使用mutable关键字声明变量后,使用下面我们来看一些例子。// 定义一个可变整形变量,初始值为1,改变值后为10> letmutable num = 1;;valmutable num : int = 1>num;;val it :int

2012-02-23 14:24:30 751

翻译 F#与数学 - 数字运算与F# PowerPack

这篇文章是此系列中的第一篇,在这个系列中,我将介绍F#中的一些特性,如对数字运算有帮助的特性以及一些来自F# PowerPack库的一些功能。大部分内容最初都是为位于MSDN上名为“F#中的数字运算”的章节(我之前发布的)所写的,但是后来,我们决定把重点放到使用第三方语言库的F#编程上,这些库提供了更多有效的实现以及更丰富的标准数字运算函数集合,通常在实现机器智能学习和概率算法或者进行统计分析时,

2012-02-16 14:32:41 968

原创 F# 入门(九): Seq序列

如果你熟悉F#中的list,你可能知道List模块中包含了很多方便快捷的用来处理多种集合类型数据的函数,其实Sequence与List相似,也是拥有着大量此类函数,这些函数可以用来处理任何实现了IEnumerable接口的集合类型。Sequence与List 最大的区别在于Sequence 在任意时刻,内存中仅会存储此Sequence的一个元素,就如同C中的枚举。而List 则需要全部存储

2012-02-15 15:36:40 1309

原创 F# 入门(八): 值类型/引用类型

总得来说,数据值存储在栈上面的称为值类型,而数据值存储在堆上面的称为引用类型。对于F#而言,每个声明的值都会在创建时被初始化,因为在函数式的编程中,值被声明后就是不可变的。下面看看怎么获取某个值的情况:Unchecked.defaultof获取'a的默认值typeof返回描述'a的System.Type对象sizeof返回'a在栈上的空间大小在F#中,默认所有值

2012-02-15 15:31:47 678

原创 F# 入门(七): 匿名函数

在F#中,我们使用关键字fun来定义函数。函数的参数是以空格来区分的,且函数体与函数的参数被一个左箭头(->)隔开的。 下面是一个函数示例,此函数将传入的两个值相加: fun x y-> x + y 注意,在上面这个函数中,我们并没有看到具体的函数名,像这样定义的函数,我们称之为匿名函数,或者函数表达式,或者表达式。 乍一看,或许你会觉得没有名字的函数会

2012-02-07 16:27:32 841

原创 F# 入门(六):F#中的 for/while循环

首先我们来看看F#中基本的for循环编写方法。for循环for语句1 := for循环变量 =表达式1 to表达式2 do表达式3 donefor语句2 := for循环变量 in表达式4 do表达式5donefor语句1有点c语言的风格。for语句2就是一般所说的foreach循环,类似于C#,不过功能更强大。 下面我们来看看第一种for循

2012-02-07 14:33:23 1243

翻译 合成函数

在一次和Dustin Cambell一起吃中饭时,我们谈到了如何让Did it with .NET成名,然后我们自然而然的谈到了合成函数这个话题。我是管道运算符(|>)的超级粉丝,但是我却重未发现一个适合使用合成函数运算符(>>)的地方。Dustin给了我一篇他最新写的博客,在读完之后,我意识到以前我的一些错误做法及想法。在F#中,合成函数是一项非常基础的技巧,而且你应该完全的掌握它。那么

2012-01-19 13:28:45 1052

翻译 玩转F#中的链表

链表是函数式编程的骨干部分,因此,要成为一个真正的F#程序员,你必须能掌控如何操控链表.幸运的是,F#中的链表既简单又直观,那么就让我们开始吧. 玩转F#链表 在区分F#链表与位于System.Collections.Generic命名空间下的.NET数组(Arrays)和范型List时,我们需要注意下面一些东西:

2012-01-16 16:49:20 978

翻译 地道的F# - 函数式 vs. 命令式

我们的故事要从这个叫Stuart Bowers的家伙开始,下图中,他正拿着一个来自Café Press网站的杯子喝着咖啡,此杯子正是他对函数式编程做出出色贡献的象征。  Stuart是Amalga(一个微软推出的医疗系统)项目的一个开发者,也是微软公司的一位全职员工。此人不写博客——此乃世界的一大损失也… 不管怎样,他还是帮我审读过我写的书中的几个章节,并且最近我们还有一次

2012-01-12 15:19:04 870

翻译 F#真棒 - 决策树 - 第一部分

Programming F#这本书已经发行了! 这意味着你可以,也应该去商店并买上一本.既然已经有Programming F# 这么出色的F#语言编程指导书了,那么对于语言特性而言,我更愿意写更多关于程序方面的东西. 这就是说,让我们看看,能用这么棒的F#语言做些什么.这是名为”F#真棒”系列博客中的第一篇.这些博客为我们展示了先进的,贴近实际的F# 应用程序能做的不可思议的事情.这篇博客

2012-01-11 15:39:01 1593

翻译 F#真棒 - 决策树 – 第二部分

在我的前一篇文章中过了一遍ID3 算法后面的理论。现在我们在此基础上得到了那个痛苦的数学公式,让我们写一些代码吧!这里是一个用F#实现了的算法(同时在文章底部有附件下载)。entropy和informationGain这两个函数在上篇文章中已经提到过了,所以让我们来过一遍这个实际的决策树是怎样构建的。这里还有点小工作,即计算出最佳的决策树分割点,然后用F#你能非常美观地用代码表达它。

2012-01-11 14:14:22 1697 1

翻译 F# 中的主动模式

也许以前你就听说过主动模式----通常与"了不起的"或者"惊人的"这些词联系在一起. 主动模式是F# 众多特有功能中的一个,并且,当你对这些功能有所体验时,你会觉得主动模式将会是最强大的功能中的一个.这篇文章将会从主动模式的单条件和多条件匹配到部分和参数化匹配来展示它的强大之处.你会通过这篇文章里的一个例子来了解为什么它会命名为主动模式.那么,让我们开始吧.首先,我们来认识一下主动模式.

2012-01-09 16:33:31 881

翻译 M-Brace ---- F# 在云计算中的应用

Nessos Information Technologies最近提供了一篇位于SkillsMatter(一个技术网站)的关于M-Brace(一个基于F#语言的云开发环境)的讲座,名为"M-Brace– F#在云中的应用". George Stavroulakis这样写道:我们想再一次的感谢你,因为你,才让我们与伦敦的F#团队联系在一起.SkillsMatter上的每个东西都如此出色,并且

2012-01-06 15:19:19 721

原创 F# 入门(五):F# 代码结构及编译顺序

F#与C#/java/C++的代码区域划分有很大的不同,它是靠行缩进来区别不同的代码作用域的。F#编译器编译文件的顺序是垂直从上到下,就如之前说的F#代码文件都是有上下顺序的,如图:这个项目下有两个文件,如果"Program.fs"想要引用"Helper.fs"里的代码,那么"Helper.fs"文件必须在"Program.fs"上面,不然会出现未定义错误。这里可以通过选中该文件,然后用"

2012-01-06 11:15:40 1458

翻译 F# 和Silverlight 4

下面的内容是关于Silverlight4上的F#的!Dmitry有关于这个话题的所有详细资料:这周的早些时候,我们已经将F#运行时作为Visual Studio 2010的Microsoft Silverlight4工具(此下载包含了在VS2010环境下开发Silverlight程序的所有文件)的一部分发布出来了,此运行时是为Silverlight4准备的。

2012-01-05 16:26:17 552

原创 F# 入门(三):F# 基础数据类型

类型检查可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器进行语义分析中进行的。如果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换)就称此语言为强类型,反之称为弱类型。F#使用的是静态类型检查。这意味着,如果你传入一个string 值给 类型为int的变量,那么你将得到一个编译错误。下面是F# 中一些数据类型:你可以通过let关键字来定义值,

2012-01-04 16:04:26 1667

空空如也

空空如也

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

TA关注的人

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