F#程序设计-F#语言基础之基本类型(1)
来源:互联网 发布:php在线测试 编辑:程序博客网 时间:2024/06/07 18:15
在F#程序设计-入门篇中我们利用了两个程序简单的介绍了下F#,在接下来的F#语言基础中,我们将会介绍F#的基本类型、F#的函数编程、F#语言用到的一些集合类型(比如Map、List)以及最后F#程序的模块(Modules)、命名空间(namespace)。
基本类型
一个类型是一个抽象或者概念,并且主要的是它对于执行是安全的。某些类型或许直接代表一个整数,而另一些表现的更为抽象,比如像函数。F#是静态类型,即类型检查是在编译时完成。例如,如果一个函数接受一个整数作为参数,如果您试图通过一个字符串,你会得到一个编译错误。同C#一样,F#是充分支持.NET 类型的转换以及创建的,比如我们一开始的Hello,World程序中的DateTime就属于.NET类型,除了支持.NET类型外,我们还可以自己定义自己的类型。
在F#中,创建一个值,只需要简单的使用let关键字,让一个值绑定到一个value中,除了创建一个值外,let关键字还可以做很多的事情,比如创建一个函数等,在后面的文章中将会详细的介绍let关键字,现在只要知道,你可以使用一个let关键字来引入一个新的标识就行,比如在FSI中创建一个值x:
> let x = 1;;
val x : int = 1
现在我们要介绍的第一个基本类型是
一、基本数字类型
数字类型包含有整数类型和浮点数类型,下面将列出F#中支持的基本数字类型:
类型
后缀
对应的.NET类型
数值范围
byte
uy
System.Byte
0 to 255
sbyte
y
System.SByte
−128 to 127
int16
s
System.Int16
−32,768 to 32,767
uint16
us
System.UInt16
0 to 65,535
int,int32
System.Int32
−231 to 231−1
uint,uint32
u
System.UInt32
0 to 232−1
int64
l
System.Int64
−263 to 263−1
uint64
ul
System.UInt64
0 to 264−1
float
双精度浮点基于IEEE64标准。代表约15个有效数字值。
float32
f
System.Float
单精度浮点基于IEEE32标准,代表大约有7位有效数字值
decimal
M
System.Decimal
固定精度浮点型,28位精度
要定义新的数值,使用let关键字以及在整数或浮点数后面带有可选的后缀字符,后缀决定的整数或浮点数字类型,如下面的代码段:
> let answerToEverything = 42UL;;
val everything : uint64 = 42UL
> let pi = 3.1415926M;;
val pi : decimal = 3.1415926M
> let avogadro = 6.022e-23;;
val avogadro : float = 6.022e-23
除此之外,F#将还允许你在数字面前使用前缀0x、0o、0b指定十六进制、八进制、二进制数值,如:
> let hex = 0xFCAF;;
val hex : int = 64687
> let oct = 0o7771L;;
val oct : int64 = 4089L
> let bin = 0b00101010y;;
val bin : sbyte = 42y
> (hex, oct, bin);;
val it : int * int64 * sbyte = (64687, 4089, 42)
如果您对IEEE32和IEEE64标准熟悉,您还可以指定使用十六进制,八进制或二进制浮点数,您还可以指定使用十六进制,八进制或二进制浮点数,F#将把二进制值转换成相应的到浮点数,如下面的代码:
> 0x401E000000000000LF;;
val it : float = 7.5
> 0x00000000lf;;
val it : float32 = 0.0f
数值类型的运算
在数字类型中你可以使用标准的算术运算符,下表列出了F#中支持的运算法则:
操作符
描述
示例
结果
+
加法运算
1+1
2
-
减法运算
1-1
0
*
乘法运算
2*3
6
/
除法运算
8/3
2
**
幂运算
2**3
8
%
求模
7%3
1
默认情况下,算术运算符不检查溢出,因此,如果您超过了另外一个整数值允许的范围内,正数得出的结果将视为一个负数,相反,如果一个整理类型数字太小,负数将会变成正数,看下面的代码就知道了:
> 32767s + 1s;;
val it : int16 = −32768s
> −32768s + −1s;;
val it : int16 = 32767s
除了四则运算符之外,F#还支持标准数学函数,下面完整的列出了支持的数学函数:
Routine
Description
Example
Result
abs
Absolute value of a number
abs −1.0
1.0
ceil
Round up to the nearest integer
ceil 9.1
10
exp
Raise a value to a power of e
exp 1.0
2.718
floor
Round down to the nearest integer
floor 9.9
9.0
sign
Sign of the value
sign −5
−1
log
Natural logarithm
log 2.71828
1.0
log10
Logarithm in base 10
log10 1000.0
3.0
sqrt
Square root
sqrt 4.0
2.0
cos
Cosine
cos 0.0
1.0
sin
Sine
sin 0.0
0.0
tan
Tangent
tan 1.0
1.557
pown
Compute the power of an integer
pown 2L 10
1024L
BigInt类型
如果你正在处理的数据大于264,F#将用BigInt类型来代表任意大的整数,也就是说除非你的内存足够大,否则它就能表示无穷大的数字。 BigInt类型为System.Numerics.BigInteger类型的别名,不仅F#,在C#以及VB.NET中也支持任意大的整数。BigInt类型使用字母I来表述,如语句let x = 1024I。
- F#程序设计-F#语言基础之基本类型(1)
- F#程序设计-F#语言基础之基本类型(2)
- F#程序设计-F#语言基础之核心类型(1)
- F#程序设计-F#语言基础之核心类型(2)
- F#程序设计-F#语言基础之函数(1)
- F#程序设计-F#语言基础之剖析一个F#程序
- F#程序设计-F#语言基础之函数(2)
- F#学习之路(4) 基本类型
- F#程序设计-入门(1)
- F#入门-第二章 F#基础-第十节 引用类型
- F#入门-第二章 F#基础-第十九节 option类型
- F#入门-第二章 F#基础-第一节 基本数据类型
- F#语言
- F# 基础
- F#程序设计-函数式编程之Records
- F#程序设计-面向对象编程之继承
- F#学习之路(6)列表类型
- F#学习之路(7)集合类型
- VC中cl.exe的用法
- 常见的端口号及协议如下表
- TYPER程序
- 列一下我需要学习的东西及进度【不断更新】
- 中国干部行政级别
- F#程序设计-F#语言基础之基本类型(1)
- 窥窥iPhone
- 百度面试题及我的解答(5)-0 优化性能
- bochs虚拟机配置
- RANDRECT程序
- 忘记Ubuntu密码怎么办
- 环形旋转文字特效
- 军衔与警衔的对应关系(转贴)
- 要想成为一名优秀的程序员需要重点掌握那些知识