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

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

 

【简讯】Python 3.5.0b1发布 《算法的乐趣》作者王晓华访谈:多看、多做、多想是秘诀 专访李祎:Java在Testin的技术应用 React首部经典图书推荐:全程经典实例,360度剖析React.js 再做一个Android!Google发布第二代VR眼镜Cardboard Go语言开发常见陷阱,你遇到过几个? 奏响年度最强音 第七届中国云计算大会日程全公布(表) 【CTO讲堂】请在还年轻的时候,尽量多踩些坑 以细分使用场景为突破点 探究墨迹天气的体验创新 熟练成就创造——MathWorks全球副总裁Richard Rovner、产品市场经理赵志宏专访 Objective-C编码规范:26个方面解决iOS开发问题 豌豆机器小组发布最新WRTnode2R,支持华为Liteos、QQ物联与AllJoyn [新书推荐]Node.js项目实践:构建可扩展的Web应用 【简讯】Perl 5.22.0 发布,大幅改进代码! 【征文】特别策划——群雄逐鹿共话新型数据库 针对DCloud侵权质疑,APICloud发布声明 《近匠》小鱼天气,中国风与细粒度空气质量检测 Xcode 7 beta发布,Swift 2.0带来哪些新变化? 【有奖征集】MDCC 2015演讲议题征集全面启动 Swift语言那些鲜为人知的特性 《开源者说》08期:聊聊Java那些事儿 专访唐成:从小工到专家,PostgreSQL的修炼之道 《瞬间之美》作者Robert Hoekman Jr:如何成长为UX领袖人物? TIOBE 2015年6月编程语言排行榜:Swift份额上升,Objective-C成自由落体 【CTO讲堂】Box首位华人核心工程师的回国创业之路 【探秘ES6】系列专栏:ES6简介 专访《Javascript设计模式与开发实践》作者曾探:爱编程 爱生活 【探秘ES6】系列专栏:迭代器和for-of循环 【CTO讲堂】UCloud联合创始人兼CTO莫显峰:如何成长为技术合伙人? 【探秘ES6】系列专栏:生成器 iKair转型传感器及SaaS厂商,发布Maxense平台与9款“云传感器” 有了Swing,还有必要使用AWT吗? 怎样将richtextbox中的内容存入sql server数据库? 哪位用VC做过拨号程序阿 紧急求援!!!pqmagic在Windows 2000 professional下的安装问题! 如何在PB中通过脚本将文本文件导入数据库中? 一玩3D游戏就退出,一上网就死机,本人用的是小影霸速配3000,何故? 舌尖的热恋(淡月儿) cbuilder5的工程用cbc6打开,编译的时候,出错。为什么?紧急求救!!!!!!!!!! 关于session的问题 如何读取相对路径的文件 我的这点程序怎么运行有错?(内付原码) 编译器错误信息: CS1519: 类、结构或接口成员声明中的标记“(”无效 请教关于VXWORKS的SDK转到LINUX上的方法 有多少人用Struts做过项目啊? 询问所有JSP的高手!!!(在线等) 怎样写一份解决方案 怎样做像qq那样的面板,有源码最好了 还是鼠标事件问题!大家快帮帮忙! 求和的问题 icmp是什么东西,怎么设置?如何打开或关闭它? 抢分啦~~~~ C/C++中有类似于汇编中的宏替换(&)吗? 关于VB的绘图闪烁 哪里有免费空间, 高手必看,微软专家也过来,可能是一个BUG 一个简单的问题! 询问所有ASP的高手!!!(在线等) 请问谁做过类似VC里的界面编辑器的软件 如何处理有"'"单引号的sql语句 菜鸟!!!!!!!!!!!想编一个象棋的程序看看我的思路 cn_robot(创造上帝的猪(CSDN封杀过没脸做人)),你进来!!! 请问怎样添加资源文件 关于积分系统的算法,可以实现必给分,希望大家多提出宝贵意见 《东方时空分家录》据说是中央电视台内部人拍的 JSP电子书?地址? 这里谁有写日记的习惯(打在电脑上的),欢迎参加 如何调用rar来压缩一个文件夹,在线等待 求救!为何我用GetSockName函数得到的本机IP地址为0.0.0.0? 怎样让JTextField也象TextField具有当作为密码框的效果? 简单问题:用Split分割的字符,怎么得到分割后的字符总数??? 急!!!!!请问正则表达式可否用来查询中文 高手请进,送分的问题! 没人知道add连接俩text形变量的用法吗?紧急! 请教各位一个奇怪的问题 格式问题 关于WIN2000的网络问题,急!!在线等待! 有没有什么函数可以将数据窗口A里的一个字段记录自动COPY下来,然后在另一个窗口可以人工地PASTE.? 蓝企鹅进来(其他高手也行!)------程序问题! 我装的weblogic610_win为什么在win2000下运行后打不开http://127.0.0.1:7001/console INTEDIVE的帮助那有下载的?????(中文版) 请问标准C有什么时间函数呢? 这里谁有写日记的习惯(打在电脑上的),欢迎参加 英语蓉城学堂课课练八上unit 3 self check的题 my dream 英语作文50字(中文)梦想是作家但更想当歌手 根据划线部分的发音分类.watched played headed picked pulled collected planted visited liked tasted walked showed lived asked answered fined kicked waited(都是划的ed)[t]:[d]:[id]对音标不熟悉,555, 战士指看南粤中指看改为俯瞰好吗,为什么 以My dream为题写一篇英语作文50个单词以上,梦想成为教师 根据划线部分的发音把单词分类.如图. 鸟瞰“宫殿之海”阅读答案鸟瞰“宫殿之海” 旅居北京的时候,我最喜欢去的公园就是景山公园.它幽静、古朴,引人遐思;而且,唯有在这景山之巅,万春亭畔,才能够鸟瞰北京,俯视占地七十二 my dream 英语作文50字以上(中文)梦想是作家但更想当歌手 jim does have a nice computer at mom.为什么这里是does? 发ə:的英语单词快、快、快…… 句型转换和根据汉语意思完成句子 Does he has a computer 哪里错了? 七年级上英语练习册Unit 关于长满白发的优美句子 英文翻译.别让我拖累了你 读ə:的英语单词20个 读ə:的 英语单词! 请勿大声喧哗的警示标语,请勿乱扔果皮纸的警示标语,请勿吸烟警示标语.警示标语语言要幽默,有趣味. 永恒的英语怎么写? 论文摘要中译英,〔论文摘要〕排序有助于儿童认知经验与逻辑判断能力等的发展.因此,在儿童数教育中,排序有着重要的地位.但目前,国内外有关学龄前儿童长度排序能力发展现状及年龄特点 请勿大声喧哗,请勿乱扔果皮纸屑,请勿吸烟.改得更有趣 永恒的英语单词怎么写 would you like some chicken to eat?would you like some chicken?这两句话有错误吗 醉翁亭记写景的句子有哪些 每到下雨天是我最讨厌的日子,现在的雨衣也不好,还是一样的淋透,有什么样的雨衣是完美的吗 下雨天你喜欢用雨伞还是雨衣? 醉翁亭记中表达作者复杂感情的句子是 英语翻译:不要不好意思 下雨天,是穿雨衣好呢?还是打雨伞好? 初三英语句型转换和根据意思完成句子,.1.I'll have my hair cut tomorrow.I'll _______ _______ _______ _______ my hair tomorrow.2.碰见我时她刚从银行取钱出来.She _______ just _______ some money _______ _______ the bank when sh 鸟瞰是什么意思 复数用has还是have 句型转换 .跟据汉语意思完成下列句子1.He went to Beijing by plane.(改为同义句)He______ _______ Beijing.2.I have always wanted to visit (the USA)(对括号提问)______ _____ ______ you always wanted _____ ______?3.More than t 和鸟瞰意思一样的词语有 感受生活的滋味 根据汉语提示完成句子句型转换根据汉语完成句子 俯瞰什么意思?不会啊 初中作文生活中的感受,作文思路是什么,写什么事? 句型转换 根据汉语完成句子 9.You should have to stay behind if your homework__before five o'clock.A.isn't done B.won't be done C.doesn't do D.wasn't done 瞻仰什么,凝视什么,俯瞰什么 急求一篇几十字的就一分钟能讲完的“演讲稿" 具体内容、、、我是一名高二的学生 物化班的班长 明天我就要代表班级去发一个言 是关于班级整体目标的 我的语文水平不好 老师又非要叫我 新概念英语题 [ˈɪntrestɪŋ]英语单词是? 英语口语(汉译英)一切进展顺利麽?或一切还好嘛?用英语怎麽说啊? 笑笑在公共电话亭打电话如果是3分钟以内需要0.5元如果超过3分钟每多打1分钟交0.3元.笑笑打完电话共交3.2元笑笑在公共电话亭打电话如果是3分钟以内需要0.5元如果超过3分钟每多打1分钟交0.2 ['zɪərəʊ]是什么英语单词? 英语口语考试,我叫XXX,来自东北,我的家乡在辽宁,图片上的绿色区域.东北物产丰富,土地肥沃.盛产玉米、大豆、大米,我的家乡是座重工业城市,以多产煤和琥珀而著称,琥珀是非常珍贵和漂亮的 在一个电话亭打一次电话收费0.50元,如果超过3分钟,每多打一分钟要多付0.30元.李明打完后交了1.40元,他打电话用了几分钟? 英语单词中跟读相同的音的单词有那些 中译英 我的英语口语不是很好 所有你知道的 有关父亲的优美句子 ['sɪnəmə] [tʃek] [mʌtʃ] [ˈeɪti] 这些是什么词 醉翁亭记中议论语句,说说这句表达了作者怎样的思想感情?有什么含义【 醉翁亭记表明作者志趣的句子 《一课一练》6年级英语N版第二学期Test5(For Unit 9--10)的几道题答案37.Some flower pots may __the car ang hurt people in the street.A.fall down B.fell down C.fall onto D.fell onto37.Tom never does his homework __,so he often makes m 醉翁亭记中的主旨句是什么,体现了作者什么的思想感情? 求一首英文歌名字~有i gotta have you baby.美国偶像第八季10中 Lil Rounds唱的那首歌?在13分钟的时候~不是independence day...不是gotta have you...是一首很舒缓的歌.有点蓝调. 八年级英语unit 10唉呀. 现在我的英语成绩落下了一大半. 各位好心的大哥大姐帮帮忙把 unit10的语法重点 点出来. 快期末考了呀. 还有,顺道,也干脆把整本书的内容简单的讲出考点. 谢谢 本 《醉翁亭记》中,表达作者复杂感情的句子是:_________________ 文中点明全文主旨的句子是:____________ 她哭得非常厉害---英语怎么说
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘