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

第一个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# 教程”。
单击“确定”。
该教程将显示在“解决方案资源管理器”中。
本文来自微软网站。

 

必须谨记!Node.js安全开发技巧 聚焦新平台新应用 IBM 2014技术峰会上海站顺利落幕 《近匠》NAGA娜迦信息:移动安全加固定制化 棱镜、飞流、TalkingData三方解读:手游如何高效运营 【MDCC秀场】枕戈待旦——秉持移动开发大潮下的主角思想 Netflix的首席产品官Neil Hun谈推荐系统打造和AWS实践 微信开放WiFi接口,醉翁之意在乎O2O还是大数据? 软硬整合:基于云的微型智能防丢设备Linquet 【MDCC专访】AppCan CTO赵庆华:助力企业快速移动化 使用Bluemix中的Rules服务构建一个酒店预订应用程序 基于IBM Bluemix开发微信公共账号应用 用Cloudant在Bluemix上构建一个简单的文字游戏应用程序 IBM Bluemix是什么? 【最具价值CTO评选秀】纷享销客CTO刘晨:企业移动的技术挑战 【最具价值CTO评选秀】能做存储的超级计算机——任宇翔和以色列团队的创业故事 OpenStack Swift存储策略 分享5个可视化的正则表达式编辑工具 在iOS程序中使用Bluemix云推送服务 GitHub开源任务列表组件 表白健身小能手!详解Apple Watch特色功能 高逼格不任性!个人智能航空摄影飞行设备ZANO Clappr——开源的Web视频播放器 东软举办2014解决方案论坛 将全面推进BBC战略 Google Glass已死,智能眼镜长存! 五个步骤,保护移动应用免受恶意攻击 声波改变移动社交——参加联想“茄子快传”创意征集 赢取平板电脑大奖! 车载硬件Baen:被游戏化的驾驶体验 深入解析Docker背后的namespace技术 响应苹果要求:Qt 5.4、Qt Creator 3.3同迎RC版 击碎泡沫谈发展,盘点OpenStack商业生态圈! 2014年11月操作系统份额:Windows 7雄居第一,XP跌新低 请教又一ShellListView和ShellTreeView中的问题?还望大家多多指教! 不懂!不懂!不懂!关于文档和视图。 将照片从数据库中取出,并显示到Image控件中,若当中不用文件作为临时存储行不行?? 弹出菜单怎么做 关于存储过程执行的正误判断及数据回滚问题。 关于LPCWSTR的问题? TChart的Canvas写上字后,最小化再最大化后字就没了, [2]请大家无论如何都要帮个忙,oralce存储过程性能问题,高手请进!!! 请问如何直接取得其它计算机的系统时间 如何使的 Form2 在 Form1 的 Top ? 怎样在pagecontrol的一个tabsheet中的页面加一个上下的滚动条 急!将textbox控件放入table中后无法通过controls获得textbox的id? 大家说说看!! 初来乍到,向各位学习,请大家指点一下,介绍些好的C#的WEB源码示例。 请大家帮我看看! weblogic发布servlet的问题 Fatal Error 的问题 哪里有和手机一样的笔划输入法下载. 哥哥们,问题还没有搞定,帮帮忙吧,很急呀,分不够可以加分 XDevClub.Com[X时代开发俱乐部]欢迎大家一起来讨论,来者有分 求救!!我的vc缺少一个 psapi.h 头文件!!!急用,帮忙粘贴一下,当场给分!!! 怎样更改CListCtrl中内嵌的CHeadCtrl控件的风格? 有关TChart的问题? 我怎样才能获得插入语句的ID值? 求帮助数组的问题 给分100 紧急求救 在DELPHI里执行ORACLE存储过程出错??? 当按照书名查询时,系统提示没有该索引:no index with 'bookname' field.何故 CorelDram教程碟不能播放怪的问题!! 如何在vb調用SQL存儲過程,并能得到返回的參數值. 哪位大侠帮帮忙呀!! 用CString的Find(LPCTSTR pstr,int nStart),pstr有没有通配符,急!!!!! 一个XP与2000的共享问题 打印问题,请各位提点建议。 DBA的缺省密码---【在线等】 错误:"参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。" 产生原因 免费100m asp 空间 求救,如何打开一个USB设备,CreateFile吗?请具体些 在线求救 谁是最可恨的人? 如何将本页设为只能是 target="_top" 谁有格斗游戏的源码,设计资料! 三人合作共同开发一网站,现需页面设计,有意者留下EMAIL 怎样用C#把窗口菜单和按钮做成象VS.NET中的平面菜单和工具栏上的平面按钮? 为什么在MMC中新建SQLSERVER注册总是出现超时已过期的错误? 這樣定義宏是什么意思:#define LIBCMD(givenfunction) \? ===这样的SQL在ORACLE 怎么执行不了 一个WIN2000与WINXP的共享问题 如何将一个CBitmap存为BMP文件? 在directshow中,如何实现像大部分播放器那样的“快进”功能? 较难问题--IE6不能启用cookie? 表示女孩能做到的男孩也可以做到的名言? 硝基苯的结构简式为什么不对? 原子吸收光谱法中常用原子化器有哪些? 哪种陶瓷里能用到碳酸铯?碳酸铯在陶瓷里起什么作用,哪种陶瓷里能用得到碳酸铯,因为陶瓷种类太多,有便宜的,贵点的,很贵的!希望解答者能把范围缩小点!谢谢! 汞电池漏夜漏出来的是汞吗? 中子在原子中的作用?对原子自身的作用~~ 碳酸铯的一些机关知识?碳酸铯的一些用途及用处! 无汞电池的漏液有毒吗对人 原子吸光光谱法中使用氩气的作用是什么 碳酸铯为什么显碱性 Y态的紫铜可以热处理变成软态的吗? 骗人的把戏是什么意思 困惑想在上学时塞圆珠笔头,因为写字时晃荡,字写起来别扭.现在都不上学了我写字时还去塞圆珠笔头,我想问有写字去塞圆珠笔头的吗?是否我太认真了没必要,我写字时有一丝的活动就塞即使 尿蛋白微量这个情况有什么问题吗? 并用它造句 VmLAL2(SO4)3 含有ag硫酸根离子,若把此溶液取一半加水稀释至2VmL,则稀释后溶液中的Al离子的物质的量的浓度是多少? 哪种材质的锅铲好 红铜怎样能变硬 找关于植物的书,我想找一本介绍各种植物,最好带图的书最好有更精准的书名,顺便把书的简要信息说一下 用圆珠笔向上写字为何不出水why? 安卓手机GPS定位精度问题请问下,安卓手机定位的GPS获取的坐标,要精确到多少,才能保持5m范围的误差?天气好,室外的情况下.比如经纬度应该保证多少个小数点.我要做地图开发. 虾塘水ph值 也升不起来也肥不起来怎么办啊 急洒了石灰过 一两天就掉了 烧菜最好用什么锅铲 HNO2,HOF,CsO2 ,AsCl5分解的方程式指明条件 电动车车电瓶漏电是什么原因 为什么ph越大 物质的量浓度相同的三种盐NaX、NaY和NaZ的溶液,其pH依次为8、9、10,则HX、HY、HZ的酸性由强到弱的顺序是( ) 实验室用51g 2%的H2O2溶液和一定量的MnO2制取O2 (1)51g 2%的H2O2溶液中,含有H2O2()g,是()mol H2O2(2)计算完全反映后产生氧气的物质的量(写出计算过程) 这是什么茶叶,叫什么名字 为什么PH相同,水解程度大的盐溶液较稀 氧气怎样用化学式表示? VmLAL2(SO4)3溶液中含ag硫酸根离子 若把此溶液取一半加水稀释至2VmL则稀释后溶液中铝离子的物质的量浓度是: 和What is this in English意思差不多的还有那些句型?一般疑问句 氧气的化学式 怎样提高自由基反应速率自由基加成反应 碳酸铯不溶水? A3分解纯是不是氢氧化纳 投影机投影在墙上和投影在投影布上有什么差别?颜色会不会有变化?画质会不会降低?那用投影机投到墙上和34寸液晶电视比,哪个画质更好,颜色更鲜艳. 10克的不纯锌与100克稀硫酸完全反应制得剩余固体的质量为109.8克.产生的氢气多少?锌的纯度 初三科学~高手进!在长江三角洲河珠江三角洲地区,农民将低洼地挖成塘,挖出的泥土堆在塘边成基,在基上种桑,桑叶养蚕,蚕粪下塘养鱼,塘泥又作为桑树的肥料.请根据上述“桑基鱼塘”生态农 投影幕布如何区分,比如白幕,玻纤幕,玻珠幕, 甲酸苯甲脂结构简式怎么写 一定温度下,向饱和氢氧化纳溶液中加入一定量的纳块,充分反应后恢复到原来温度,溶液的pH为什么不变? 为什么都说用圆珠笔写字的话,字越写越怪? 苯甲酸甲酯和甲酸苯甲酯是一样的么? 为什么我家猪烧熟后骨头是黄色的 能说的仔细点吗?我听说是病猪 打的青霉素所以骨头是黄色的 为什么是黄色的骨头还有什么可能 有对人体不好的原因吗? 烫头发的药水伤到了皮肤怎么办啊?烫头发的时候,药水流到了皮肤上,然后流到的地方都变红红的,这该怎么办啊? 为什么用粗锌代替纯锌与硫酸反应更快锌与硫酸的反应 烧出来的米饭里有黄色的一粒粒的东西是什么 为测定粗产品中CoCl2•6H2O含量,称取一定质量的粗产品溶于水,加入足量AgNO3溶液,过滤、洗涤,将沉淀烘干后称其质量.通过计算发现粗产品中CoCl2•6H2O的质量分数大于100%,其原因可能是? 水的坏处 水的好处 水能变成什么 自由基的生物学作用是什么? 什么样的男人才算好男人? 为什么软态铜管经过冷拉拔后表面会出现很多沿管子方向的划伤? 高中化学 用惰性电极电解K2SO4方程式怎么写? COCL2与H2O2反应吗 紫铜软态直管和普通的铜管除了质软容易弯曲,减少弯曲变形外,有何区别? 惰性电极在电解池里面有什么用啊, 除锈药水的成分是什么? 什么叫结构简式 鱼翅、燕窝、鲍鱼、海参、熊掌...等哪个最贵?这些非普通食品哪个最贵?哪个最好吃?大家随便发言啊,说点什么都行. Facebook第三季度创收20亿美美国一男子好运连连 才中千万美金又中美主播为“杀光中国人”言论向示威者鞠日男子扮高富帅专哄按摩女 谎称投资骗日本人气漫画《海贼王》发行总量将超3希腊内衣商发明“社交内衣”:解扣可自德国锁定美情报部门窃听站位置 位于使印度一客车爆炸起火44人死 司机清洁法国多名知识分子请愿维护嫖妓权 被称1990至2010年北半球平均气温或全球发展中国家每年新增200万名15研究:男性关注女性身材多于面部长相(伊拉克向美国请求军事援助 对抗“基地巴黎举办巧克力展 巧克力时装秀当揭幕9成入驻开城韩企难以正常运转 客户丢温州中院首倡“低碳诉讼” 接收电子版黄坤明辞去杭州市人大常委会主任职务《马约》走过20年专家:7天退换货遇节日顺延 邮费一般国内汽油价格每升下调5分 幅度创10金砖五国官员学者:加强合作建立公平合今年首设慈善方阵服务台滨江街道招聘社区残疾人工作专职委员1兴南大道 番禺大道明年9月拟升级改造企业破产管家成立行业协会险中求胜? 奥巴马推十项移民新政“单云龙水库停供水到年底 “吃饱喝足”明云南每年6000人出国留学对留学中介云南民族大学与德宏州共建国际职业教育城市规模划分标准调整 昆明为Ⅰ型大城云南民族大学与德宏州签订合作协议助推圈占断头路 搞起花木场公众号要买就买能当配饰的饭盒“哨街精”图记小心!别让陌生人逗你家小狗玩用中药给自己染个包今年马拉松广州选手比例下降充分开发橱柜内部 架子挂钩向墙壁要空抢残疾乞丐92.8元 醉酒男子获刑三两独居婆婆“奉陪到底”的闺蜜情缘
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘