F# 入门(六):F#中的 for/while循环

首先我们来看看F#中基本的for循环编写方法。

for循环

for语句1 := for 循环变量 = 表达式1 to 表达式2 do 表达式3 done

for语句2 := for 循环变量 in 表达式4 do 表达式5done

for语句1有点c语言的风格。

for语句2就是一般所说的foreach循环,类似于C#,不过功能更强大。

 

下面我们来看看第一种for循环:

> // For loop

for i = 1 to 5 do

printfn "%d" i;;

1

2

3

4

5

val it :unit = ()

这里在表达式中将循环变量进行初始化,从1循环到5,然后输出每个整数。

 

downto关键字来表示反向递减的循环:

> // Counting down

for i = 5 downto 1 do

printfn "%d" i;;

 

第一种for循环只支持整数,如果循环超过System.Int32.MaxValue次时,你需要用可枚举(enumerable)for循环,即第二种for循环:

> // Enumerable loop

for i in [1 .. 5] do

printfn "%d" i;;

1

2

3

4

5

val it :unit = ()

这跟C#foreach循环类似,但它可以支持模式匹配,这让它比C#更强大。如下面的例子,famousPets中有猫和狗,这里用到了F#中的可区分联合

> // Pet type

type Pet=

| Cat of string * int // Name, Lives

| Dog of string // Name

;;

type Pet=

| Cat of string * int

| Dog of string

 

> letfamousPets = [ Dog("Lassie"); Cat("Felix", 9);Dog("Rin Tin Tin") ];;

valfamousPets : Pet list = [Dog "Lassie"; Cat ("Felix",9); Dog"Rin Tin Tin"]

 

> //Print famous dogs

for Dog(name) in famousPets do

printfn "%s was a famous dog." name;;

Lassiewas a famous dog.

Rin TinTin was a famous dog.

val it :unit = ()

 

对于第二种for循环,只要对象有序列,就可以进行访问,具体来说:

  • 链表或数组
  • 所有seq数据类型
  • 所有支持GetEnumerator方法的数据类型

这里值得注意的是,F#for循环中没有break或者continue关键字,如果真需要,你可以添加一个变量,把for循环转换成while循环。

 

 

下面我们简单介绍下while循环。

while循环

while语句 :=while 表达式1 do 表达式2done

 

> // While loop

letmutable i = 0

while i < 5 do

i <- i + 1

printfn "i = %d" i;;

i = 1

i = 2

i = 3

i = 4

i = 5

valmutable i : int = 5

while循环不能被用在存粹的函数式类型,因为你不可以改变判定而循环永远也不会终止。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值