说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

第一个F#入门程序Hello world

HTML文档下载 WORD文档下载 PDF文档下载
Visual Studio 2010 包含一种新的编程语言,它就是 F#。 F# 是一种多范例语言,它除了支持传统的面向对象的编程和 .NET 概念外,还支持函数编程。 本文介绍了它的一些功能和语法,演示如何声明简单变量,编写和测试函数,创建元组和列表,以及定义和使用类。

Visual Studio 2010 包含一种新的编程语言,它就是 F#。 F# 是一种多范例语言,它除了支持传统的面向对象的编程和 .NET 概念外,还支持函数编程。 下面的示例介绍了它的一些功能和语法。 该示例演示如何声明简单变量,编写和测试函数,创建元组和列表,以及定义和使用类。

 

创建新的控制台应用程序
在"文件"菜单上,指向"新建",再单击"项目"。
如果您在“模板类别”窗格中看不到 Visual F#,请单击“其他语言”,然后单击“Visual F#”。 中央的“模板”窗格将列出 F# 模板。
的顶部查找模板以确保 .net Framework 4显示在目标框架框中。
在模板列表中,单击“F# 应用程序”。
在“名称”中键入项目的名称。
单击“确定”。
新项目出现在“解决方案资源管理器”中。
使用 let 关键字声明和使用标识符
将以下代码复制并粘贴到“Program.fs”中。 您要将每个标识符(anInt、aString 和 anIntSquared)绑定到一个值。

创建新的控制台应用程序

 

1. 在"文件"菜单上,点"新建",再单击"项目"。

 

2. 如果您在“模板类别”窗格中看不到 Visual F#,请单击“其他语言”,然后单击“Visual F#”。 中央的“模板”窗格将列出 F# 模板。

 

3. 在顶部查找模板以确保 .net Framework 4显示在目标框架框中。

 

4. 在模板列表中,单击“F# 应用程序”。

 

5. 在“名称”中键入项目的名称。

 

6. 单击“确定”。

 

新项目出现在“解决方案资源管理器”中。

 

使用 let 关键字声明和使用标识符

 

将以下代码复制并粘贴到“Program.fs”中。 您要将每个标识符(anInt、aString 和 anIntSquared)绑定到一个值。

 

let anInt = 5let aString = "Hello world"// Perform a simple calculation and bind anIntSquared to the result.let anIntSquared = anInt * anInt
在 F# Interactive 窗口中查看结果
选择前面过程中的 let 表达式。
右击所选区域,然后单击“发送到 Interactive”。 另外,也可以按 Alt+Enter。
“F# Interactive”窗口将打开,并显示解释 let 表达式的结果,如下列代码行所示。 类型是从指定的值推断的。
val anInt : int = 5
val aString : string = "Hello world"
val anIntSquared : int = 25
在命令提示窗口中查看结果
1. 将下列代码行添加到“Program.fs”中。
System.Console.WriteLine(anInt)System.Console.WriteLine(aString)System.Console.WriteLine(anIntSquared)
2. 按 Ctrl+F5 运行代码。 将显示命令提示窗口,其中包含下列值。
5
Hello world
25
可以通过将鼠标指针停留在前面 WriteLine 语句中的标识符名称 anInt、aString 和 anIntSquared 上,验证推断的类型。
定义并运行函数
1. 使用 let 表达式定义一个求平方函数,如下面的代码所示。 该函数有一个形参 n,并返回发送到 n 的实参的平方。
let square n = n * n// Call the function to calculate the square of anInt, which has the value 5.let result = square anInt// Display the result.System.Console.WriteLine(result)
2. 按 Ctrl+F5 运行代码。 显示的结果为 25。
3. 递归函数需要 let rec 表达式。 下面的示例定义了计算参数 n 的阶乘的函数。

 

let rec factorial n =     if n = 0     then 1     else n * factorial (n - 1)System.Console.WriteLine(factorial anInt)
4. 按 Ctrl+F5 运行该函数。 显示的结果为 120,即 5 的阶乘。
创建集合:列表和元组
1. 聚合值的一种方法是使用元组,如下面的代码所示。

 

let turnChoices = ("right", "left")System.Console.WriteLine(turnChoices)// Output: (right, left)let intAndSquare = (anInt, square anInt)System.Console.WriteLine(intAndSquare)// Output: (5,25)

2. 聚合值的另一种方法是使用列表,如下面的代码所示。

 

// List of best friends.let bffs = [ "Susan"; "Kerry"; "Linda"; "Maria" ] 

通过使用“cons”运算符 (::),将新的好友添加到列表中。 请注意,该操作不更改 bffs 的值。 bffs 的值不可变,因此无法更改。

 

// Bind newBffs to a new list that has "Katie" as its first element.let newBffs = "Katie" :: bffs

使用 printfn 显示列表。 函数 printfn 显示结构化值中包含的各个元素。

 

printfn "%A" bffs// Output: ["Susan"; "Kerry"; "Linda"; "Maria"]printfn "%A" newBffs// Output: ["Katie"; "Susan"; "Kerry"; "Linda"; "Maria"]
3. 可以通过按 Ctrl+F5 或选择一段代码再按 Alt+Enter,查看结果。
创建和使用类
1. 下面的代码创建 Person 类,该类具有两个属性 Name 和 Age。 Name 为只读属性。 像函数编程中的大多数值一样,该属性的值不可变。 如果需要,可以在 F# 中创建可变值,但是您必须显式将其定义为可变。 在下面的类定义中,Age 的值存储在可变局部变量 internalAge 中。 可以更改 internalAge 的值。
// The declaration creates a constructor that takes two values, name and age.type Person(name:string, age:int) =    //  Person 对象的 age 值可变. 这使下面定义的 mutable变量internalAge也可变。    let mutable internalAge = age    // Declare a second constructor that takes only one argument, a name.    // This constructor calls the constructor that requires two arguments,    // sending 0 as the value for age.    new(name:string) = Person(name, 0)    // 只读属性    member this.Name = name    // 可读写属性.    member this.Age        with get() = internalAge        and set(value) = internalAge <- value    // 方法实例    // 增加person的age.    member this.HasABirthday () = internalAge <- internalAge + 1    // Check current age against some threshold.    member this.IsOfAge targetAge = internalAge >= targetAge    // Display the person's name and age.    override this.ToString () =         "Name:  " + name + "\n" + "Age:   " + (string)internalAge
2. 若要测试该类,请声明两个 Person 对象,进行一些更改,并显示结果,如下面的代码所示。
// The following let expressions are not part of the Person class. Make sure// they begin at the left margin.let person1 = Person("John", 43)let person2 = Person("Mary")// Send a new value for Mary's mutable property, Age.person2.Age <- 15// Add a year to John's age.person1.HasABirthday()// Display results.System.Console.WriteLine(person1.ToString())System.Console.WriteLine(person2.ToString())// Is Mary old enough to vote?System.Console.WriteLine(person2.IsOfAge(18))
将显示以下行。
Name: John
Age: 44
Name: Mary
Age: 15
False
查看 F# 教程中的其他示例
在"文件"菜单上,指向"新建",再单击"项目"。
如果您在“模板类别”窗格中看不到 Visual F#,请单击“其他语言”,然后单击“Visual F#”。 中央的“模板”窗格将列出 F# 模板。
在顶部查找 模板 以确保 .net Framework 4显示在目标框架 框中。
在模板列表中,单击“F# 教程”。
单击“确定”。
该教程将显示在“解决方案资源管理器”中。
本文来自微软网站。

 

不只属于三星!uMoove将发布“眼球追踪”SDK Android掌门人Andy Rubin宣布辞职 Chrome主管接任 openSUSE 12.3发布 弃MySQL拥抱MariaDB Meteor:让实时Web App成为主流 别了,Google Reader!谷歌于7月1日关闭服务 “天网”降临 机器人或将崛起? 涅槃重生:Qt 5 for Android预览版发布 Google Play将逐步移除广告拦截应用 Shapeways公司开放API 3D打印时代来临 37signal设计师眼中的iOS与Android系统 VMware/Oracle向公有云拓展生态系统 AWS“山寨”技术伙伴创意与产品,是自我完善还是杀鸡取卵? 苹果发布OS X 10.8.3 新版Boot Camp可支持Windows 8 恭喜!麻省理工两密码学教授获2012图灵奖 Rovio的逆袭,发布首款RPG游戏“克鲁德一家” 百会呼吁微软提供合法经营Office&#160;365的相关证明 谁说Vim不是IDE?(四) RDS升级:单DB实例最高可获得3TB存储和3万IOPS 移动周报:“先验证,后开发”的App开发必杀技 Supercell首席执行官谈公司运营理念 SwiftKey:Galaxy S4输入法背后的开发团队 前IE团队领导:IE是如何走向衰败的 谷歌更新BigQuery 允许在其中加入大型数据集 初创公司Spiral Genetics:超越现有DNA序列分析平台40倍速 六大开源监测工具 你用过哪个? TUP第28期:Intel 微软 Yahoo的大数据实践 惊变14天,从“小白”到上架App Store商店 “今日头条”CEO张一鸣:我是爱冒险的技术宅 OpenStack基金会COO Mark Collier:2014年将超越AWS Evernote更新Android SDK:新增商务服务并拆分“印象笔记” 主流编译器对C++11的支持现状比较 做三维游戏都用什么工具? 各位,等这本书有消息后,我重发贴给你们加分,请问大家关于《Delphi高级开发指南》 asp的access数据库问题!! 急切求助!!!!!!!!!!!!!!!!!!!!! 关于把数据库数据生成excel文件的问题 我对现在的女大学生完全没有兴趣! 这样的人才中国有多少 ? 谁有语音卡驱动原程序 谁用过mp3play.ocx,大侠快来救火? 请问vc程序如何打包,可以在离开vc环境也可以运行? 怎么改变默认的打印机? win2000 下运行dos程序 报直接访问硬盘错误,有无解决方案 如何获取文本文件中的内容? 数据窗口问题求急!!! 有关线程。。欢迎讨论。。。 如何让GUI程序拥有一个console窗口 哪儿有可以加载背景图片的TTrackBar下载? 急!!!!! - 可以多加分 十万火急!!局域网不能访问!!(高分) 为什么程序不能发布成可执行文件? help!出现了很奇怪的现象?为什么我的asp代码不执行 等待高手! HtmlInputFile控件的使用问题 在UNIX+ORACLE+C++环境下开发的程序员的工资问题 怎样判定有几块硬盘!!!求助高手!!!!!!! 950元出售SCJP考试劵(仅限成都市) 我想利用asp中的FileSystemObject对象把一个已存在的文件改名,改成我希望的名字? 挺简单的程序运行错,请指点! 在修改vsflex控件内数据的时,输入汉字需要每次设定输入法,有没有好的办法 急求代码大全的英文电子书,哪位有的?在线等!! 小难题 在UNIX+ORACLE+C++环境下开发的程序员的工资问题 取消地址和工具栏? 诚心请教 工具栏上加下拉组合框的问题 FFDD 2.0 系统件开发规则 有MIS或ERP选型经验的朋友请点击,斑竹请务必帮助我! 系统件快速开发解决方案 —系统转系统件方案 关于paradox的字段设置 谁有jb7的注册码?能发给我吗? 我想让一个存储过程最大执行10秒,超时退出,怎么实现? 数据库连接问题 在delphi的paradox 7 的字段设置 单网卡如何帮定双IP? 这样都有?你们给我我的可用分增加了 不用hook,能不能把其他应用程序的关闭按钮或最小化最大化按钮屏蔽掉?? 如何把float转成CString 怎么把SQL SERVER2000 数据库中的表转成.dbf格式的表!谢谢 如何得到一个图形按钮的句柄啊?好郁闷!!! 关于setfilter()函数的问题 谁知道四川的高程考试什么时候报名?哪里? illegal character: \12288???什么是不合法的存在?? 在Na2CO3溶液中,为什么c(Na+)>c(CO32-)? 写出与红歌歌名相关的历史事件(现象) 举例;《松花江上》——九一八事变 ①《过雪山草地》写出与红歌歌名相关的历史事件(现象) 举例;《松花江上》——九一八事变 ①《过雪山草 急需描写冬天景色的好句好段, 碳酸钠物料守恒为什么是物料守恒:c(Na+)=2[c(CO32-)+ c(HCO3-)+ (H2CO3)] 在100ml 0.1mol/L Nahco3 中c(co32-)>c(H2CO3) 这句话对吗那在 100ml 0.1mol/L Na2co3中 c(co32-)>c(H2co3)对吗 PH为5的盐酸溶液加水稀释1000倍后溶液的PH值?PH=-lg[(10-5+999×10-7)/1000]=-lg(1.099×10-7)=7-0.041=6.959这里999是怎么来的? 常温下,0.1mol·L-1某一元酸(HA)溶液中c(OH-)/c(H+)=1×10-8,下列叙述正确的是?A.该溶液中由水电离出的c(H+)=1×10-11 mol·L-1B.由pH=3的HA与pH=11的NaOH溶液等体积混合,溶液中c(Na+)>c(A—)> 怎么去漠河北极村?交通情况怎么样 0.1mol/L Na2CO3水溶液的PH=() c(H2CO3)=() c((CO3)^2-)=()已知H2CO3的Ka1=4.2×10^-7 Ka2=5.6×10^-11 烧瓶中的水烧开后停止加热,水立即停止沸腾,如果把瓶塞塞紧,并将烧瓶倒置,用冷水浇瓶底,烧瓶内将会( ) 漠河-北极村漠河到北极村班车每天两趟,价格多少?时间?发车地点?到北极村看过后,怎么回来推荐个旅馆,靠近火车站、班车发车地点的谢谢 做馒头发面时可以加碱吗 气候的日较差和年较差随纬度怎么变化? 《我的家在东北》这首歌表达了东北人民什么样的思想感情 做馒头发面为什么要加碱 玫瑰是什么词 向0.1mol·L-1 Na2CO3溶液中滴加酚酞,溶液变红色.为什么啊.是要计算的吗.怎样算 做馒头发面时加碱的用处 1.将一定量的某盐酸加水充分稀释,则所得溶液的PH值?2.俩种溶液混合后的PH=7,这俩种溶液的PH可能是? Na2CO3这种盐的溶液能使无色酚酞变为红色,某同学想探究是Na+还是CO32-的作用使酚酞变红,他设计的下列实验中,能证明是CO32-的作用而不是Na+作用使酚酞变红色的是( )A:向NaOH溶液中滴入酚酞 《松花江上》反应的是日本制造什么事变带来的严重灾难?日本全面侵华的标志事件是什么 盐酸加水稀释后PH值会小吗?会小于7吗?我们试卷上的 说明正午太阳高度随季节和纬度的变化规律 歌曲 松花江上 1945年8月 重庆发生的大事是?中华民国正式成立时间? 汽车发动机是如何工作的啊 正午太阳高度变化幅度和纬度之间的关系 用沁园净水机过滤出来的水,是不是比自来水强? 汽车发动机如何工作100字以内,我们正在学内燃机,说得简要点就行 在《松花江上》中歌词多次出现”九一八“,有什么表达作用 雪花有几种形状?雪花很漂亮形状也很多有哪几种呢为什么形状都不相同呢? 漠河北极村最后一次出现极光是什么时候 松花江上歌词不挨打了沦陷区人民怎样的情感和什么愿望 雪花有几种形状?为什么会形成那些形状? 寻找天气的 好句子,急用,要秋天的 ,好的 Na2CO3溶液加水稀释,为什么c(OH-)/c(co32-)值呈上升趋势?Na2CO3溶液加水稀释,为什么c(OH-)/c(co32-)值呈上升趋势. 雪花有几种样子? 说明气候的诗句 NA2CO3加水稀释溶液中是否所有离子浓度都减小?若没有,什么没减小?此时应考虑水解还是电离? 雪为什么会是雪花的形状?如何形成的? 汽车发动机一会就很热水管更热是怎么回事?我的车型:铃木 羚羊变速器:手动排量:1升行驶里程:15公里购买时间:2002年9月水箱的温度最先高,而且水箱的温度降低的很慢,过一小会发动机 Na2CO3稀释过程中,溶液中_____逐渐增大A.c(H+) B.c(OH-) C.pH D.c(HCO3-)/c(CO3 2-) 位于直射点的同侧,两地纬度相差多少度,正午太阳高度角就相差多少度对吗 净水器会不会把水里的矿物质过滤掉?最后喝的是蒸馏水? na2co3溶液稀释溶液中哪些项逐渐减小?A.c(H+) B.c(OH-)·c(H+) C.c(OH-)/c(H+) D.c(HCO3-)/c(CO32-) 答案选的C.解析说OH-浓度减小,H+增大.但我怎么认为OH-增大,H+减小呢 .pH=5的盐酸,稀释1000倍后,溶液pH约为8 这话哪儿错了,在绍兴一中2011届高三头回考理科综合卷中说他是错的 松花江上运用了反复的修辞手法,指出其中的几句,并说出他表达了作者怎样的思想感情 描写冬天的段落要短一点的,急!谢谢了! 雪花为什么是那些种有规则的图形? 反复是这首诗歌运用的主要修辞方法,试分析下列词句的反复所表达的思想感情 (1)我的家在东北松花江上:反复是这首诗歌运用的主要修辞方法,试分析下列词句的反复所表达的思想感情( 夏季正午太阳高度由纬度的变化规律为? 雪花为什么有规律的形状为什么会是那么漂亮的形状. 热水变凉了是不是与水汽化吸热有关? 描写冬天的太阳的段落. 雪花的形状为什么是规律的六角型? 为什么Na2CO3的溶液中,c(Na+)大于c(co32-)大于c(OH-)大于c(HCO3-)大于(H+)只需解释为什么c(HCO3-)大于(H+),谢谢 “正午太阳高度的纬度变化规律:从直射点往南北两侧递减”中递减具体是什么意思? 为什么雪花的图案那么有规则 为什么Na2CO3的溶液中,c(Na+)大于c(co32-)大于c(OH-)大于c(HCO3-) 模仿例子 写出相应的历史事件名 松花江上——九一八事变过雪山草地是?卢沟谣是?在希望的田野上是? 常温下,有pH为12为NaOH溶液10mL,若将溶液分成两等分,其中一分加入水,另一份加入pH=10的NaOH溶液,最终将其溶液的pH变为11,则如入水与NaOH溶液的体积比为 .
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘