F 入門 四 let語句 值的繫結 函式定義

2022-07-04 22:30:13 字數 1487 閱讀 7008

let是f#裡的最基礎和最主要的乙個關鍵字,let語句是變數賦值以及對變數進行函式定義的語句。

let語句主要用來進行變數值得繫結,繫結的值是不能改變的,也就是跟常量一樣,這樣做可以避免很多程式設計師疏忽等人為bug。當然可以通過新增mutable關鍵字來進行非常量繫結。如下:

let  hellostr ="hello world" 

// 不可變的值

let  mutable num = 10// 定義乙個可變的值

num <- 15//給num值賦值

關於變數和函式的作用域會在接下來介紹f#**結構中講到。另外由於f#是垂直編譯的(即編譯順序從上到下),所以f#的**檔案是有上下順序的,規則是同檔案中上面**不能呼叫定義在下面的值和函式,對於不同檔案,被引用的**要定義在上面的檔案裡,因為會先編譯(在下篇會詳細講到)。

用let 進行函式定義,一般有兩種方式:

let  

函式名 形式引數1  形式引數2  … =      函式體

這種方式定義的函式型別是根據函式體內具體情況來推斷出引數的具體型別的,如

let addone a = a + 1

定義了名為"addone"的函式,根據函式體編譯器自動推斷出引數a是int型變數,當然負責的函式體也一樣,但如果函式體裡也沒有明確的可以推斷的話,該值就預設是個泛型'a.

2)let

函式名 (形式引數1:資料型別) (形式引數2:資料型別) ... = 函式體

let  f (x:float) = x * 2.0

這種就跟c# 一樣顯示的定義引數的型別。

函式的返回值型別:返回值型別就是該函式體最後一行(語句)的值型別。

如:let  square x = x * x // 如果沒有明確推斷,乘法計算預設是整形,即返回整形

let  hello name = 

let  a= 1

printfn "hello %s" name //這裡name根據%s推斷出是字串型別,而printfn函式無返回值,所以該函式返回值是 void

let  test a = 

a * 3.0 //推斷出是float,所以返回值是float型,注,f#中float即是double型

//()    //如果想不返回值,在函式體最後加()即void

let  returntmultiplevalues a b =

...(a*2,b + 5, a*b) //返回多個值

遞迴函式

用let rec語句來定義遞迴函式:

let rec fibonacci n = //斐波那契的遞迴

if n = 0 then 0

else if n = 1 then 1

else fibonacci (n-1) + fibonacci (n-2)

fibonacci 10 |> printfn "result: %d"

上面定義乙個計算斐波那契數列的函式然後輸出第10個斐波那契數。遞迴函式在實際的計算和應用中很有用,所以應當熟練使用。

布林值 Python入門丨布林值和四種語句

計算機的邏輯判斷,只有兩種結果,就是true 真 和false 假 計算真假的過程,叫做布林運算。true和false就叫布林值。注 只要條件判斷為真,while語句就會一直迴圈執行 例項print 3 5 print 3 5 print one one print one piece 輸出結果 t...

經典的多語句錶值函式

set ansi nulls on set quoted identifier on gocreate function dbo ufngetcontactinformation contactid int returns retcontactinformation table columns re...

對wpf 的入門記錄總結 資料繫結之值轉換

前面弄了資料繫結,現在有這樣一種需求 使用同一種型別,但需要以不同方式呈現的場景。有乙個數值,但您希望以一種方式顯示零值,而以另一種方式顯示正數 想要根據值檢查checkbox,但值是乙個字串,如 是 或 否 而不是布林值 有乙個以位元組為單位的檔案大小,但您希望根據它的大小顯示為位元組,千位元組,...