当前位置:编程学习 > 网站相关 >>

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循环不能被用在存粹的函数式类型,因为你不可以改变判定而循环永远也不会终止。
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,