F#是一种简洁、高效、富于表现性的函数式的及面向对象的程序设计语言。它是基于Ocaml的,而Ocaml是基于ML函数程序设计语言的。

F#自2002年开始研发,2005年发布了第一个版本,2007年底正式从研发专案转移至产品部门,并决定将F#置入Visual Studio.NET 2010。截止目前(2009年1月6日现在),最新的F#预览版为F# September 2008 CTP,版本号为1.9.6.2。

F#也许终将成为程序核心部分设计的首选,而C#与VB等将在用户界面交互设计方面继续发挥其强大的潜力。

更多详细介绍可以去微软F#研究中心网站上浏览到:

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/default.aspx

下面我们初步感受一下F#语言:

1。我的IDE环境是vs2010beta2,首先我们在vs中新建一个F# Application的工程。F#新建之后源文件是一片空白,可能看惯了C#的看着这个还真有点不习惯这么空,我刚开始就是。F#的源文件后缀名为.fs。

2。老一套,来一段hello world!输入代码:

System.Console.WriteLine("hello World!")

按Ctrl+F5运行一下看看。

使用关键字let申明变量,及变量的使用

let anInt = 5                                 
let aString = "Hello"                         
// 下面是通过计算将值赋给anIntSquared

let anIntSquared = anInt * anInt

我们可以将这段代码选中,点击鼠标右键选择Send to Interactive可以在vs下面的交互窗口看到上面代码的赋值结果

val anInt : int = 5
val aString : string = "Hello"
val anIntSquared : int = 25

最后我们还是利用命令将他们在程序结果里面输出吧,输入以下代码:

System.Console.WriteLine(anInt)               
System.Console.WriteLine(aString)             
System.Console.WriteLine(anIntSquared)

按Ctrl+F5运行以下,我们就可以看到结果了。
定义和使用函数
依然是利用关键字let来定义函数的,下面我们定义一个函数,输入代码:
//square就是函数名,n是它的一个参数,该函数完成的任务就是求平方let square n = n * n
下面我来调用这个函数,输入代码:
//i是存放结果的变量,anInt是上面我们定义的变量,值为5,计算结果为25let i=square anInt
最后我们输出这个i来看看:
System.Console.WriteLine(i)
注意:是递归函数的要加关键字let rec,不然的话会在函数调用内部提示你该函数未定义,下面定义的是一个递归函数:
let rec factorial n =     if n = 0     then 1     else n * factorial (n - 1)System.Console.WriteLine(factorial anInt)
创建集合:数组及lists的使用
数组一般这样进行定义的:
let point=(1,2,5)System.Console.WriteLine(point)
不过F#里的数组还可以不同类型的值都放一起,比如这样使用也可以
let dataB = (1, "fred", 3.1415)System.Console.WriteLine(dataB)
再介绍另外一种集合类型list
let pointB=[1,3,5]System.Console.WriteLine(pointB)
相对数组而言只是定义的时候用中括号来代替小括号了,但list用途相对数组更灵活,比如可以这样来定义一个从1到10的整数集合
let dataC=[1..10]System.Console.WriteLine(dataC)
这是你按Ctrl+F5可能会发现我们的dataC列表并没有全部输出,但没关系,1到10的整数的的确确已经存进dataC里了,我们换个
输出方式可以看到,
printfn "%A" dataC
关键字printfn也是一个输出语句,不过它只能输出单个变量的值或者结构
定义及使用类
下面我们来定义一个类
type MyClass(name:string,age:int)=
    //使用mutable关键字可以定义局部的值可变的变量    let mutable internalAge = age
    //此处相当于再定义一个只传一个参数的构造函数,只有一个name参数时,第二个参数默认为0    new(name:string)=MyClass(name,0)
    //member关键字用来声明类中的属性,方法,事件等作用    //这里是进行属性的定义,就跟C#里属性定义差不多,以下是定义一个只读的属性    member this.Name = name
    //这里是定义一个可读可写的属性    member this.Age        with get() = internalAge        and set(value) = internalAge <- value
    //这是定义一个方法    member this.HasABirthday () = internalAge <- internalAge + 1
    //检查当前年龄和目标年龄谁大    member this.IsOfAge targetAge = internalAge >= targetAge
    //重载ToString()函数,用来显示结果    override this.ToString () =         "Name:  " + name + "/n" + "Age:   " + (string)internalAge
我们将这个类进行实例化看下运行结果
//类的实例化let MyClass1 =MyClass("heqichang",24)let MyClass2=MyClass("momo")
//使用这种方法来给变量赋值MyClass2.Age <- 15
//调用类中的方法MyClass1.HasABirthday()
//输出结果System.Console.WriteLine(MyClass1.ToString())System.Console.WriteLine(MyClass2.ToString())System.Console.WriteLine(MyClass2.IsOfAge(18))

F#教程(一)——————F#语言概述相关推荐

  1. Delphi XE5教程1:语言概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  2. tail -f 查找关键字_C语言九种查找算法 | 总有一款适合你

    时间.空间复杂度比较 查找算法 平均时间复杂度 空间复杂度 查找条件 顺序查找 O(n) O(1) 无序或有序 二分查找(折半查找) O(log2n) O(1) 有序 插值查找 O(log2(log2 ...

  3. 【Java基础系列教程】第二章 Java语言概述、配置环境变量

    一.计算机编程语言概述 1.1 语言 语言(英文:Language)是人类进行沟通交流的表达方式.例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语.              语 ...

  4. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...

    求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...

  5. mips语言实现 f(n) = f(n-1) + 2*f(n-2) + 3*f(n-3)

    这是计算机组成的一个任务,原来拿别人的交了,现在补上! 首先,了解 f(n) = f(n-1) + 2*f(n-2) + 3*f(n-3) 的基本条件:f(0) = 0, f(1) = 1, f(2) ...

  6. c语言利用fun求最小值,c语言:请编写函数fun(),他的功能是:求f(0)到f(50)的最小值,已知:f(0)=f(1)=1,f(2)=0,f...

    #include #include int f(int n) { if (n == 0 || n == 1) { return 1; } if (n == 2) { return 0; } retur ...

  7. [转载] 《python程序设计应用教程》第一章 python语言概述

    参考链接: Python语言的优势和应用 第一章 python语言概述 1.1 python语言简介 ① 众多的开源的科学计算软件包都提供了python的调用接口,例如:计算机视觉库OpenCV.三维 ...

  8. Go语言教程[一、Go语言概述]

    一.Go语言概述 Go 语言(也称为 Golang)是一种由 Google 设计的开源编程语言,于 2009 年首次推出.Go 语言的目标是成为一种快速.简单.安全和并发的编程语言. Go 语言具有以 ...

  9. C语言核心技术-C语言概述与开发环境搭建

    C语言概述 C语言发展简史 起源 1972年,贝尔实验室的Dennis Ritchie和Ken Thompson在开发Unix操作系统时设计了C语言,该操作系统的90%以上的代码都是由C语言实现,后期 ...

最新文章

  1. C++类构造函数初始化列表
  2. linux下部署svn服务器
  3. Aurora HDR 2019中文版
  4. tomcat安装部署
  5. 打印Show Atend and Tell编码器的优化器
  6. 中国房地产官媒爆乐视投资国贸地产,布局AI智能家居生态
  7. mysql 5.6 gtid 主从_MySQL5.6基于GTID的主从复制
  8. 随堂小测冲刺.第19天
  9. HOUR 4 Expressions, Statements, and Operators
  10. SqlServer2005日志清理
  11. 我国的省级行政区中,哪些邻省最多,哪些最少?
  12. 图灵革命如何颠覆我们对世界的认知?
  13. Python数据分析第四课:数据的处理(数据合并、数据筛选、数据排序)
  14. 淘宝在线客服为什么回复那么慢
  15. Linux at命令使用介绍
  16. mysql 统计请假天数_sql查询员工请假详情——请假天数跨月问题
  17. 15版计算机应用基础知识整理,[电脑基础知识]计算机应用基础.ppt
  18. 在Dynamics 365 CRM 中使用Xrm.WebApi实现增,删,改,查(需V9.0或以上)
  19. 内嵌框架iframe
  20. 树莓派pico 最新固件地址以及无法进入BOOT模式(U盘挂载)解决方法

热门文章

  1. 与脉搏波PVR波形相关的定量测量参数
  2. potato什么软件_张鹏都这么努力又出新项目美生在线,你还有什么资格不努力!?...
  3. 贵州大数据安全工程研究中心107名DSMM测评师持证上岗
  4. 英语写作之连词的使用
  5. 云南省2021年高考成绩什么时候可以查询,2021年云南高考成绩查询时间安排 什么时候出分...
  6. python插件下载太慢了_用python给XBMC做的视频插件,运行速度很慢
  7. hgame2023 week3 writeup
  8. qt4:如何判断用户在关闭窗口是选择的是ok还是cancle
  9. redis radix相关数据结构
  10. C++程序设计(三)—— 函数和函数模板