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 2311

uint,uint32

u

System.UInt32

0 to 2321

int64

l

System.Int64

263 to 2631

uint64

ul

System.UInt64

0 to 2641

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。

原创粉丝点击