首先我們來看看
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;;12
345val 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;;12
345val 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迴圈,只要物件有序列,就可以進行訪問,具體來說:
這裡值得注意的是,在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
迴圈不能被用在存粹的函式式型別,因為你不可以改變判定而迴圈永遠也不會終止。
F 入門學習(一)
開啟專案 6 3 6.0 3.0 6 3.0 會有波浪線,預能感知,藍色警告可以執行 字元型let x1 財 val x1 char 財 注釋let x1 財 一行注釋 哈哈 我是多行 注釋 串型別 f 是強型別語言 必須把型別分的清清楚楚的意思。val it string f 是強型別語言 用來幹...
0x3f3f3f3f常量在程式設計中的妙用
今天做了一下一道多源最短路徑的問題,用弗洛伊德演算法的,五分鐘敲完,交一下發現wa了,調了半天才發現初始化鄰接矩陣的inf設定成2147483647 2 31 1 大數相加的時候會溢位,變成很小的負數 為了解決這個問題,我們就在想,要找到這樣乙個大數,滿足加上乙個常數依然是無窮大之外,我們的常量還應...
F 入門 十二 Tuple 元組
元組是f 中特有的一種資料型別,一種非常方便的資料型別,型別為system.tuple 它是一些值的組合,通過逗號來分隔每個元素,元素可以是任何的資料型別。元組和鍊錶的區別 鍊錶 元素的個數是可變的,但元素必須是相同的資料型別。元組 元素的個數是固定的,元素的型別可以是不同的資料型別。使用元組的乙個...