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

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

 

《坦克世界:闪电战》:PC转手游,不止免费! 【讲师】道里云毛文波:网络虚拟化与SDN实现Docker连通 性能测试:SequoiaDB vs. MongoDB vs. Cassandra vs. HBase 华云数据推运营型PaaS Plus平台,联合Tmax走出“去IOE”的云化之路 聚焦移动新势力 MDCC 2014免费展位团队名单公布 详解Google Authenticator工作原理 云计算的乐高玩具,Docker从根本上改变应用程序开发 【先锋】eSage缔造异构虚拟化管理技术,做数据中心核心思想执行者 Uplinq2014:亲身体验Vuforia与智能眼镜设备 MDCC 2014 移动开发者大会议程全面揭晓! 顺丰模式:物流行业“互联网化”的科技之路 移动应用云服务工具APICloud宣布完美适配iPhone6 从应用分发到能力开放 华为开发者联盟沙龙上的共赢理念 SOOMLA框架:移动游戏分分钟创建个虚拟商店 Facebook:如何让应用适合所有系统、带宽以及屏幕 Docker实践者不能错过2014 Container技术大会的九大理由!(讲师议题全面揭晓) 2014全球云计算大会中国站(CC China)精彩集锦 腾讯X5浏览服务正式开放 30多款APP成为首批受益者 Node.js设计经验谈 LeanKanban University首位中国认证讲师路宁:看板会为更多国内企业带来深刻变革 环信IM沙龙纪实:无分享不IM,无社交不未来 【工具推荐】ESL:更简洁、更高效的标准加载器 【先锋】亲加通讯云:以云服务模式为App提供社交引擎 2014中国移动开发者大调查第一批获奖名单大曝光 移动开发云服务AVOS Cloud宣布完成A轮融资 Uplinq2014:人工智能嵌入硬件 万物互联建生态 Uplinq2014:基于Vuforia的新奇智能玩具 一应俱全!开源跨平台3D应用开发框架Minko 【线下技术培训】敏捷测试实战解析和系统方案 《近匠》Ping++:简单、高效、第三方支付SDK 有关编程的12个猜想 一段C语言的程序,最后却跟了这么一段,有没有哪位高手知道这是干什么用的? 求助!!!!! 怎样提高编程水平阿?刚来请指教 下载的potoshop插件怎么安装? Move2008 J2ME SDK 发布,请下载 仅仅有OA的源代码,能做成一个可应用的商业软件吗?欢迎大家讨论 如何将OLE中的EXCEL设为指定的大小,高手救命 linux下如何安装jre? 关于打开文件的问题 我的程序怎么一放到其它机器 上就执行不了了 OLE保存时能不能单击实现??? 小问题,进者有分 一个关于sendmessage的问题。 救命啊,FTP的客户端程序 linux下如何安装jre? 怎么使验证失效? 如何实现字符串扫描? 我从来没用过C#,也不会,不过这个关于其运行的问题我确想先知道! 一个老问题! 今天我给一个男人骚扰了一回 有个问题,朋友们请进.sos 一个非常简单的问题 TListItem的Data属性(void)如何使用呀,如何读出它的值呢? bmp to ico 今天看到一个怪现象~! 软件过来人为小弟指点~~ bmp to ico 如何打开控制面板 高分求教,我爱上了兄弟的女朋友,我该怎么办?(100分) 求助:在首次适应算法和最佳适应算法中,分区分配和分区回收的c语言实现。 同在一个城市,呼吸着同样的空气,都为这老板的几块大洋打拼,蓦然回首才知道已经几年了,也该为自已的未来思考一下了。。。 请问有关两个宏 bmp to ico 硬盘无法访问的问题,急!!!估计是被黑了 ISA2000中的问题,特急,在线求助 处理窗口关闭时的动作? 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 请问不通过Image控件如何用直接用DC来显示一个BMP?? 请问现在数据库开发技术有哪些?大致情况? 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 请问汇编用什么编译器最好啊? 有什么可以下的电影啊,提供网址,谢谢 下午闷啊:( 怎样让字体自动适应分辨率 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) 高分求教,我爱上了兄弟的女朋友,我该怎么办? (100分) RowCount属性怎么用 VCL派生类的属性发布问题,请高手指教 中国能否成为世界第一? 有关cisco路由器上copy子集的疑问 怎样将msn的email用outlook express收到本地! 请告知msn的 pop smtp服务器 不能见死不救 中引号的用法是什么是四年级下册的9自然之道 用水泄不通造句 智慧 财富 权力 你会怎么排列层次RT 小悦悦现在已经去了天堂(祝福她).可是看了这么多报道要点还是在见死不救上,关于这个问题我想起曾经看过的一部美国电影,说的是一个司机在医院工作,他的工作就是每天午夜时分在城市 水泄不通怎样造句? 甲、乙两辆客车同时从A、B两个城市相对开出,当甲车到达B城时,乙车距A城还有15千米.已知甲车的速度是乙车的5/4,请问:A、B两城间的路程是多少千米? 杜鹏程( )王任重( )丁慧中( )焦若愚( )刘海粟( )甘如饴( )这些人名取自哪里? “环境规划学”用英语怎么说? A,B两个城市相距960千米,甲,乙两辆汽车从A,B两个城市同时相对开出,6小时后相遇.已知乙车每小时比甲车慢20千米,两辆汽车每小时各行多少千米?求某位大神赐教,江湖救急! 下学期是上学期.... 1、准备姿势和移动在排球比赛中的作用?2、怎样防止在体育运动中受伤?3、体育锻炼有哪些方面的作用?这是问答题,请回答的尽量详细一点. 甲、乙两辆汽车,同时从A、B两个城市相对开出……(数学题) (要有解题思路和算式)甲、乙两辆汽车,同时从A、B两个城市相对开出,经过8小时相遇后,甲继续向前开到B城还要4小时,已知甲每 一辆客车与一辆货车同时从A地出发开往B地,当客车行驶全程的15%时,与货车的距离是24千米(客车在前,货车在后),两车继续以原速度前进,当客车到达B地之后立即返回与货车相遇,这时货车行 日志的题目 是写一些朋友的 友情的 要一个唯美的题目 车水马龙 请问这俩题怎么写? 马克思的两大发现一是唯物史观,二是辩证法? 车水马龙是啥? 问一下大家如何统计word里一篇文章的单词量 有会的人说下嘛,打心底麻烦大家了 什么心什么侧 填字使他成为成语 《河中石兽》中“如其言\”的如是什么意思? 哈勃望远镜看到的了17万光年远的星云图像,那是不是我我们今天看到的图像也就是17万年前已经发生过的事情了,是不是呢, 区域经济空间结构理论及其在区域规划中的应用 3/7:5/21 4/15:4/25 1:4/5 哈勃望远镜可以看到多少万光年前的星空,为什么不能拿来看月球呢?NASA曾经说哈勃望远镜用来拍非常微弱的星光,说月球表面光亮太强,因此无法拍摄.但是最后NASA仍公布了一些哈勃拍摄的月面 区域规划的作用是什么?老兄不全呀,一看就知道是断尾的 1大于1/2.1+1/2+1/3大于1.1+1/2+1/3+1/4+1/5+1/6+1/7大于3/2.1+1/2+1/3+.+1/15大于2能得出什么结论.并证明.最好用数学归纳法. 环境规划需要的数学知识有哪些 区域规划的类型有哪几种? 多米诺骨牌效应的意思,全点! 现在要求:.b-2.z=----- 的取值范围.a-1而且a、b满足的平面区域是一个三角形,如下图.图片见下。还要求: y=(a-1)^2+(b-2)^2 的取值范围。 什么心什么力?一个成语.什么腔什么调?一个成语 多米诺骨牌的来源? 高一关于环境规划与数学的报告怎么写 甲、乙两车分别从A、B两地同时相对开出,经过2小时相遇……甲、乙两车分别从A、B两地同时相对开出,经过2小时相遇,相遇后各自继续前进,又经过1.5个小时,甲车到达B地,这是乙车距A地还有35千 车水马龙怎么解释 什么是规范字? 甲、乙两车同时从A、B两地相对开出,经过2小时,甲车已行的路程与全程的比是2:5,乙车行了全程的三分之一,这时两列车还相距96千米,A、B两地相距多少千米?要算式 车水马龙的故事? 怎么写规范字 甲、乙两辆汽车同时从A,B两地相向开出,甲车的速度是每小时行42km,乙车每小时行54km,两车在离中点18km处相遇.A、B两地的距离是多少千米? 用车水马龙组句 怎样才能写规范字? 水泄不通的造句 万壑藏云的读音 近期的平板哪款好?支持WLAN的,价格嘛,随意吧,我主要就是查点东西,看个电视可以给我推荐一下吗? 电子排布问题:第112号元素电子排布(初级,不管电子亚层)KLMN……层各排几个电子?可能有点弱智,还是求不用把电子亚层标示出来,只用告诉我每层排多少个电子就行了,高一党还没学电子 “藏在云外的青春”这句话是什么意思? 商用现榨豆浆机,哪款比较好? 甲、乙两辆汽车分别同时从A、B两站相对开出.第一次在离A站90公里处相遇.相遇后两车继续以原速前进,到达对方的出发地后又立刻沿原路返回.第二次相遇在离A站50公里处.求A、B两站之间的路 22日日全食 武汉最佳观测点武汉最佳观测点在哪呢?需要些什么观测器吗?哪里有卖的?谢谢了 求英文翻译 建筑智能化系统的销售和服务及其相关的环境管理活动 a b两辆汽车同时从甲、乙两站相对开出,两车第一次在距甲站32千米处相遇,相遇后两车继续行驶,各自抵达乙、甲两站后,立即沿原路返回,第二次在距甲站64千米处相遇,甲、乙两站相距多少千米 2009年 拨款50亿元针对农民的农用三轮车及农用慢性机动车的一次性置换新型农用车及微型车的补助, 水泄不通 造句 有蜀君子曰苏君,讳洵,字明允,少独不喜学,年已壮,犹不知书.年二十七,始大发愤,谢其素所往来少年,下列句子中词语的解释错误的是( )A一时后生学者皆尊其贤(贤能)B盖其禀也厚(深厚)C绝笔不 “纷至沓来”是什么意思? 自然之道见死不救里死的意思  我和同伴紧张地看着眼前的一幕,其中一位焦急地对向导说:”你得想想办法啊!”向导却若无其事地说:”叼就叼去吧,自然之道,就是这样的.”向导的冷淡 英语翻译我现在是大三了我请问就目前来看我应该学侧重哪方面的英语呢比如说要进企业是不就该学国际贸易方面的啊?现在没有财富到时追加希望有经验的好心人帮下忙谢谢 神题求解答-行测判断题滨海市政府决定上马一项园林绿化工程,政府有关部门在调研论证的基础上,就特色树种的选择问题形成如下几项决定:(1)樟树、柳树至少选择一样;(2)如果不种 冷空气今晚降临杭城 早出晚归的人出门柳岩顶寒风爆乳露背装性感出席优雅盛典众女星冒零度严寒抛胸露背出席优雅盛典日本外务省网上传播争岛视频 引发中韩中关村被卡女子确认脑死 家属否认其有美国称全美近600只宠物疑因食用中国北京脖子卡护栏女子脑死亡 家属称不相慈溪公司老总险被绑架 主谋是自己昔日垂涎女孩美色 男子宁波当街袭胸总在肯德基过夜的流浪女诞下龙凤胎 帮国内唯一留存最完整红色刊物在温州埋藏西湖龙井红茶开始崭露头角 价格每斤8温州金改进展:民营银行方案已上报或将今年年底杭州-深圳每天开行6对动车 124套,成交量创5年新低 房博会“温州民营银行成立方案已上报或将发行市夏宝龙:加强基层基础 凝聚发展力量浙江加强事业单位岗位聘期考核管理 打俄土豪赠女友电子香烟 镶246颗钻价触目惊心!吸毒前后面部之变我海军“机动-5号”太平洋大演兵亳州:门锁当玩具 卡住男孩手指教师孙国军关爱农民工子女 无私奉献感公益版“爸爸去哪儿”启动 困难学生将failed: 奶牛高速公路上玩“跨公益达人策划数次社会活动 用草根方式亳州:公款贺年卡从今说再见郑州在迪拜航展推广中国未来航空城袁桐利当选天津滨海新区书记(图/简历广西一贫困县实行高中免费教育 让学子云桂铁路广西段路基首件工程通过评估一战爆发百年将至 欧洲将建一战主题网刘慧:全面发力 强力冲刺 努力完成全中国出席华沙气候大会 发布《国家适应美国务卿淡化对伊朗核谈判期待中国农业银行法兰克福分行开业菲律宾军方空投救援物资 灾区少年追抢印尼巴厘岛旅游车坠谷致4名中国游客遇红学名家齐聚一堂 共同纪念曹雪芹逝世台巡逻舰进入钓鱼岛附近海域 对日喊话只因暗恋女生与他人聊天 河南焦作一男温州基本侨情调查大幕将启 调查员进入
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘