F# Programming
文章平均质量分 71
fsharp_net
这个作者很懒,什么都没留下…
展开
-
注意:我们不能在模式匹配中放入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 · 1872 阅读 · 0 评论 -
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 · 2644 阅读 · 0 评论 -
F# 入门(十三):Record(记录)
Record在F#中是一种很重要的用来存贮数据的结构.它与元组和F# 中的枚举(DiscriminatedUnions)差不多,但是又有比他们更方便的地方,如:我们可以很轻松的访问Record中的每个元素的值,而不需要如元组那样做更多的操作才可取得。下面我们看看Record的定义及与之相关的操作Record的定义我们使用type 关键字来定义Record,如我们定义一个名为myReco原创 2012-03-14 11:02:44 · 2101 阅读 · 0 评论 -
F# 入门(十二):Tuple(元组)
元组是F#中特有的一种数据类型,一种非常方便的数据类型,类型为System.Tuple。它是一些值的组合,通过逗号来分隔每个元素,元素可以是任何的数据类型。 元组和链表的区别:链表:元素的个数是可变的,但元素必须是相同的数据类型。元组:元素的个数是固定的,元素的类型可以是不同的数据类型。使用元组的一个好处就是,如果用元组来作为函数的返回值进行返回,就可以很方便地从一个函数中原创 2012-03-07 15:28:28 · 776 阅读 · 0 评论 -
F#与数学(I) – PowerPack中的数字类型
在这篇文章中,我们将简单地看看F# PowerPack中可用的两种数字类型。Complex类型代表由实数部分和虚数部分组成的复数。两部分数字都是以浮点型数据存储的。类型BigRational表示由任意大小的分子与分母组成的有理数。任意大小的整数则是由从.NET4.0就可用的BigInterger类来表示的(位于System.Numerics.dll程序集中)。在.NET2.0中,BigIntger翻译 2012-02-27 15:18:44 · 1046 阅读 · 0 评论 -
F# 入门(十一):链表与数组
链表和数组都是数据的集合。F#的链表是线性列表的一种,单方向链表,它是基本数据结构之一,一种携带指向下一个元素的指针的数据结构。链表中的元素必须是同类型的数据类型。而数组与链表很相似,但它可以使用数组索引来访问到数组中的某个元素。同时,它的元素也必须全部是同类型的数据类型。 链表的写法是用[]来表示,同时元素用";"来分隔。当然不用";"分隔情况也是有的。请看下面的一些例子:原创 2012-02-27 10:39:49 · 743 阅读 · 0 评论 -
F# 入门(七): 匿名函数
在F#中,我们使用关键字fun来定义函数。函数的参数是以空格来区分的,且函数体与函数的参数被一个左箭头(->)隔开的。 下面是一个函数示例,此函数将传入的两个值相加: fun x y-> x + y 注意,在上面这个函数中,我们并没有看到具体的函数名,像这样定义的函数,我们称之为匿名函数,或者函数表达式,或者表达式。 乍一看,或许你会觉得没有名字的函数会原创 2012-02-07 16:27:32 · 853 阅读 · 0 评论 -
F#与数学 - 数字运算与F# PowerPack
这篇文章是此系列中的第一篇,在这个系列中,我将介绍F#中的一些特性,如对数字运算有帮助的特性以及一些来自F# PowerPack库的一些功能。大部分内容最初都是为位于MSDN上名为“F#中的数字运算”的章节(我之前发布的)所写的,但是后来,我们决定把重点放到使用第三方语言库的F#编程上,这些库提供了更多有效的实现以及更丰富的标准数字运算函数集合,通常在实现机器智能学习和概率算法或者进行统计分析时,翻译 2012-02-16 14:32:41 · 1005 阅读 · 0 评论 -
F# 入门(九): Seq序列
如果你熟悉F#中的list,你可能知道List模块中包含了很多方便快捷的用来处理多种集合类型数据的函数,其实Sequence与List相似,也是拥有着大量此类函数,这些函数可以用来处理任何实现了IEnumerable接口的集合类型。Sequence与List 最大的区别在于Sequence 在任意时刻,内存中仅会存储此Sequence的一个元素,就如同C中的枚举。而List 则需要全部存储原创 2012-02-15 15:36:40 · 1347 阅读 · 0 评论 -
F# 入门(八): 值类型/引用类型
总得来说,数据值存储在栈上面的称为值类型,而数据值存储在堆上面的称为引用类型。对于F#而言,每个声明的值都会在创建时被初始化,因为在函数式的编程中,值被声明后就是不可变的。下面看看怎么获取某个值的情况:Unchecked.defaultof获取'a的默认值typeof返回描述'a的System.Type对象sizeof返回'a在栈上的空间大小在F#中,默认所有值原创 2012-02-15 15:31:47 · 689 阅读 · 0 评论 -
F# 入门(十):mutable关键字
F#中的变量的值在声明初始化后就不可以被修改了。但如果想使用可变的变量时,用mutable关键字修饰变量就可以被修改了。 使用mutable关键字声明变量后,使用下面我们来看一些例子。// 定义一个可变整形变量,初始值为1,改变值后为10> letmutable num = 1;;valmutable num : int = 1>num;;val it :int原创 2012-02-23 14:24:30 · 784 阅读 · 0 评论 -
F# 和Silverlight 4
下面的内容是关于Silverlight4上的F#的!Dmitry有关于这个话题的所有详细资料:这周的早些时候,我们已经将F#运行时作为Visual Studio 2010的Microsoft Silverlight4工具(此下载包含了在VS2010环境下开发Silverlight程序的所有文件)的一部分发布出来了,此运行时是为Silverlight4准备的。翻译 2012-01-05 16:26:17 · 568 阅读 · 0 评论 -
F#与数学(II) – 在图形算法中使用矩阵(PartI)
在本系列的上篇文章中,我们了解了complex和BigRational类型,它们都是位于F# PowerPack中的数字类型。除了这两种,PowerPack库也包含了一种名为matrix的类型,此类型表示一种由浮点数组成的二维矩阵。 在这篇文章中,你将学会在F#中如何使用矩阵,如何使用F#PowerPack中提供的相关函数。我将用一个例子来介绍此语言库,此例子使用所谓的邻接矩阵来展示图翻译 2012-03-21 15:41:58 · 2122 阅读 · 0 评论 -
F#与数学(II) – 在图形算法中使用矩阵(PartII)
使用矩阵Matrix是一种可变类型,因此它可以在创建后被修改。当你必须要修改矩阵式,最好的方法就是一次性的修改,修改后将之视为不可变的(例如:当矩阵作为函数结果被返回时,而此函数是使用可变性来实现的)。这样的话,你会在构造是得到好的性能,同时你可以保持代码的其余部分透明地引用它。 用序号访问矩阵元素下面的代码展示了直接创建一个4x4的邻接矩阵的方法,此邻接矩阵来自于本文介绍部分所讨翻译 2012-03-21 15:47:02 · 1776 阅读 · 0 评论 -
F#和C#里面的NULL 值
首先,NULL对于F#类型来说是不允许的值,这在某种意义上是好的,但是由此也带来了麻烦。 第一个需要可能是:忘记所有关于option和NULL的参数,我需要NULL,那是我编程的方式。那么好。你可以使用你允许它为NULL的类型的[]特性。 真正走进F#的人们同意使用option是一个更好的选择。然而,这种限制使F#很难和C#程序交流。例如,你想从C#里面使用F#库。你真的能够禁止C翻译 2012-05-24 11:06:12 · 2042 阅读 · 0 评论 -
Window Phone上的F# - 图形计算器
最近在西雅图F#小组期间,我被问到怎样用F#来做windows phone calculator。若是你知道F#,它并不难。计算器的骨干就是一个字符串解析器。它能被从头开始写或者用已有的东西来写。既然我想投入生产而不是准备一个面试,那么我选择使用F# powerpack提供的已有的yacc解析器。如果我把前后端的yacc分析器结合起来,大部分工作就完成了,余下的就是去补下你的yacc\le翻译 2012-06-01 13:18:10 · 1839 阅读 · 0 评论 -
F# ≥ C#(活动模式 和枚举)
F#提供了一个叫"活动模式"的有趣功能。它把输入的数据转换成其他不同的东西。一个有趣的使用实例就是代替枚举。但我编程枚举的时候,我总不高兴去链接枚举项到它的定义。例如,下面的枚举定义了 数字枚举,enum Numbers{ Odd, Even,}但是它没有说明什么是Odd,什么是Even。我试着使用特性或简单的注释,但是我真正想得到的是在F#中见到枚举项就获翻译 2012-06-01 13:31:58 · 2072 阅读 · 0 评论 -
F# 3.0 CLIMutable特性
如果你曾经用一些设计器支持使用过XAML,那么你将额外地受益于设计器所带来的好处。我已经花费了数周,不用实现任何功能和设计器支持的工作。这里描述了一个案例。默认的构造函数是关键!不幸地是,F#里面的 record类型没有一个默认的构造函数,这使绑定变得困难。 现在我们有CTlMutable来解决这个问题。CTlMutable截屏如下: 如果你定义下面的F#代码:[ ]t翻译 2012-05-24 11:30:36 · 1609 阅读 · 0 评论 -
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 · 1676 阅读 · 0 评论 -
F#与数学(Iv) - 泛型数字代码
泛型数字代码是能够被用来处理多种不同数字类型包括像int 型, decimal型 和float型或者甚至是我们自己的数字类型的一些计算(比如此系列的前篇文章中的时钟运算)。泛型数字代码区别于普通的F#泛型代码像'a 链表类型 或者List.map函数, 因为数字代码使用数字操作符, 比如为每个数字类型而区别定义的+或者 >=。当编写有一些参数类型 'T的简单泛型代码的时候, 对于参数的类型我们翻译 2012-06-01 13:48:28 · 2743 阅读 · 1 评论 -
如果类是个泛型类的话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 · 1931 阅读 · 0 评论 -
F# 智能感应在某些情况下不能工作
在现在的Visual Studio 2012中,F#智能感应有时候在某些情况下不能工作。那么在何种情况下它会不工作呢?可以绕过去么?让我来告诉你详细情况吧。请看如下代码:open System.Collections.ObjectModel module PortableLibrary1= type Keys= | One = 1 | Two原创 2012-06-08 16:59:40 · 1676 阅读 · 0 评论 -
Type Provider - 通过 给一个自定义基类共享信息
我有一个坏习惯,对我来说,忘记它不是很容易。昨天晚上,这个小怪物又来困扰了我。可能我不能解决之前的问题,相反我被引诱到一片新领土。昨天晚上,这个怪物提醒了我单元测试 type provider, 使我想到怎样在不同的type provider方法间共享信息。目前的type provider的方法调用是独立的, 几乎没有如何维护一个内部状态的例子。正则表达式type provider是一个例子。翻译 2012-06-01 12:57:24 · 2499 阅读 · 0 评论 -
模式匹配的类型测试不能识别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 · 1616 阅读 · 0 评论 -
F#与数学(II) – 在图形算法中使用矩阵(PartIII)
其他矩阵操作我们将简单的介绍一些F# PowerPack中提供的关于矩阵的有用的函数与操作符用来总结这部分内容。下面的列表给出了一组相似函数的使用示例。逐点操作Matrix.cptMaxMatrix.cptMinOperators: + and .*matrix -> matrix -> matrix这些函数与操作对作为参数传入的两个矩阵的对应元素执翻译 2012-03-21 16:03:15 · 2261 阅读 · 0 评论 -
F# 入门(五):F# 代码结构及编译顺序
F#与C#/java/C++的代码区域划分有很大的不同,它是靠行缩进来区别不同的代码作用域的。F#编译器编译文件的顺序是垂直从上到下,就如之前说的F#代码文件都是有上下顺序的,如图:这个项目下有两个文件,如果"Program.fs"想要引用"Helper.fs"里的代码,那么"Helper.fs"文件必须在"Program.fs"上面,不然会出现未定义错误。这里可以通过选中该文件,然后用"原创 2012-01-06 11:15:40 · 1503 阅读 · 0 评论 -
F# 入门(四):let语句——值的绑定/函数定义
let是F#里的最基础和最主要的一个关键字,let语句是变量赋值以及对变量进行函数定义的语句。let语句主要用来进行变量值得绑定,绑定的值是不能改变的,也就是跟常量一样,这样做可以避免很多程序员疏忽等人为BUG。当然可以通过添加mutable关键字来进行非常量绑定。如下:let helloStr = "Hello World" // 不可变的值let mutable num = 1原创 2012-01-04 15:52:59 · 1652 阅读 · 0 评论 -
F# 入门(三):F# 基础数据类型
类型检查可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器进行语义分析中进行的。如果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换)就称此语言为强类型,反之称为弱类型。F#使用的是静态类型检查。这意味着,如果你传入一个string 值给 类型为int的变量,那么你将得到一个编译错误。下面是F# 中一些数据类型:你可以通过let关键字来定义值,原创 2012-01-04 16:04:26 · 1741 阅读 · 0 评论 -
F#中的异步和并行设计模式(二):用事件触发来报告进度
在这篇文章中,我们将着眼于一个常用的异步设计模式,我叫它用事件触发来报告进度。在这篇文章后面,我们将使用这种设计模式从推特上抽样读取帖子流。这是F#异步编程基础技术系列的第二部分,这里有些例子的代码是摘自F# JAOO 教程。· 第一部分描述了F# 通过支持轻量级交互是一种怎样的并行和交互式语言,并且介绍了 并行CPU异步处理和并行I/O异步处理模式。·翻译 2011-12-28 10:29:26 · 959 阅读 · 0 评论 -
F#中的异步和并行设计模式(三):代理
在这个系列的第三部分,我们解释了F#中的轻量级代理的和交互式代理,并且看过了一些与之相关的典型的设计模式,包括内部隔离状态。第一部分分描述了F#是一种并行交互式语言及如何支持轻量级交互操作的,并且为并行CPU异步处理和并行I/O异步处理两种模式作了诠释。第二部分描述了一种通过触发事件提交部分结果的模式。 模式4——你的第一个代理让我们看看你的第一个异步代理。翻译 2011-12-28 10:31:54 · 1002 阅读 · 0 评论 -
F#中的异步和并行设计模式(一):并行CPU和I/O计算
在F#中的异步和并行设计模式:并行化的CPU和I/O计算F#是一种并行地、交互式的语言。在这点上,我们的意思是:运行F#程序既能有多个实时的赋值(例如:.NET线程主动计算F#的结果)又能有多个等待的响应(例如:等待对事件和消息作出响应的回调和代理)。编写并行和交互式程序的一个简单方法是使用F#异步表达式。在这篇和接下来的文章中,我将向你介绍F#异步编程的一些基本方法---- 粗略地讲,这翻译 2011-12-22 11:12:11 · 1131 阅读 · 0 评论 -
设计模似和F#相关资料的一些链接
最近,我发现不少人会遇到关于设计模式和F#编程的问题。我认为这是一个很大的努力。这个问题可以在很多方面解决:在F#代码中面向对象的设计模式是怎么样的呢?这些主要的设计模式是怎样适用于F#的设计呢?在第一类中,仅在过去的几天中我们就有责任链模式、装饰模式、观察者模式、策略模式和状态模式的F#例子,以及一堆发在F#Snippets网站上有着设计模式标签的例子。在第二类中,今翻译 2011-12-22 16:02:23 · 511 阅读 · 0 评论 -
F# 代理与超时
在我上一篇文章中,我提供了一段非常简单的F#代理控制台应用程序的代码。每次您运行控制台应用程序时,只需要输入一行文本,它会产生一条新消息,然后把这条消息发布到一个F#代理的消息队列。该代理是一个MailboxProcessor类的一个实例。MailboxProcessor是在F#核心库中Control命名空间中的一个类。正如MailboxProcessor名称中所暗示的,代理就是您可以发送消息给它翻译 2011-12-20 17:48:59 · 651 阅读 · 0 评论 -
F# 3.0 BUILD讲座的示例代码
这段时间有些朋友因为要做F#3.0的讲座,需要我在F# 3.0 BUILD 讲座中的演示脚本, 我已经将它打包在本文的后面了。这些例子仅仅是为了测试Visual Studio 11 开发者预览版.它们在以后Visual Studio版本上必须做适当修改才能运行。如果这里有什么问题请通知我Demo\TwitterFeed\TwitterFeed.fsx - 用来介绍F#2.0函数式翻译 2011-12-21 16:15:16 · 977 阅读 · 1 评论 -
FSharp 3.0 开发者预览版
Visual Studio F# 团队很高兴地宣布作为Visual Studio 11 开发者预览版 的一部分:F# 3.0 预览版于2011年9月12号正式发布。正常预览版发布将在9月15号。F# 编译器将继续作为一个独立的安装, 但是配置不作为预览版的一部分。F#是一个强大、简洁、高效和易于表达的语言,能用简洁的代码帮您解决复杂的问题。F#是生产率加速器—越来越多的社区用它在不同领域来翻译 2011-12-20 11:00:48 · 1526 阅读 · 3 评论 -
F# 中的主动模式
也许以前你就听说过主动模式----通常与"了不起的"或者"惊人的"这些词联系在一起. 主动模式是F# 众多特有功能中的一个,并且,当你对这些功能有所体验时,你会觉得主动模式将会是最强大的功能中的一个.这篇文章将会从主动模式的单条件和多条件匹配到部分和参数化匹配来展示它的强大之处.你会通过这篇文章里的一个例子来了解为什么它会命名为主动模式.那么,让我们开始吧.首先,我们来认识一下主动模式.翻译 2012-01-09 16:33:31 · 897 阅读 · 0 评论 -
F#真棒 - 决策树 - 第一部分
Programming F#这本书已经发行了! 这意味着你可以,也应该去商店并买上一本.既然已经有Programming F# 这么出色的F#语言编程指导书了,那么对于语言特性而言,我更愿意写更多关于程序方面的东西. 这就是说,让我们看看,能用这么棒的F#语言做些什么.这是名为”F#真棒”系列博客中的第一篇.这些博客为我们展示了先进的,贴近实际的F# 应用程序能做的不可思议的事情.这篇博客翻译 2012-01-11 15:39:01 · 1605 阅读 · 0 评论 -
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 · 1269 阅读 · 0 评论 -
F# Interactive技巧:在sprintf/printf/fprintf中使用AddPrinter,addPrintTransformer和%A来格式化数据
Mingtian Ni 问过这样的一个问题:我想改变一些类型在fsi输出中的格式,尤其是集合类型。怎样的方法才是比较合理的呢?….有哪位朋友可以提供一点信息吗? 或者一些指南和示例那就更好了。下面就是一些在F#Interactive中格式化数据的技巧。 这并不足以理解为一个指南,这仅仅能帮你入门。如果你需要更多的示例,请联系我。对F# interactive来说,一个简单的方法就是使用翻译 2011-12-31 10:35:02 · 843 阅读 · 0 评论 -
F# 入门(二):安装和使用
现在F#是VisualStudio2010默认的一部分,如果你已经装了VS2010,那么你可能已经装了F#。如果已经装了VS2010却没有看到F#,那么你要确认你装了F#安装包。可以通过控制面板中的添加/删除程序添加F#包(如下图):如果你不是一个VS用户或者正在使用VS2008,那么你要下载单独的F#包,首选MSDN上的F#资源:http://msdn.microsoft.com/f原创 2011-12-31 10:25:49 · 2077 阅读 · 0 评论