F#個人學習筆記1(F# survey)

1、let 關鍵字用來聲明標識符,標識符是值對象的名稱,值對象可以是數字、字符串等也可以是方法。但標識符不同與變量,標識符一旦賦值則不可以改變。在同作用域下聲明一個已經存在名稱的標識符時,則是得到一個新的標識符。
let i = 1
let add x y = x + y
(注:在方法內聲明一個與全局標識符同名的標識符時,會隱藏全局標識符的值,但當方法結束後,全局變量標識符的值還是原來的值。)


2、rec 遞歸函數在聲明要加的關鍵字 (示例 從1加到100) 

let rec addToNum x =
match x with
|1 -> 1
|x -> (addToNum x - 1) + x

printf "%i" (addToNum 100)

3、fun   function 匿名方法關鍵字
let f = fun x y -> x + y  // fun關鍵字定義的匿名方法參數可以任意個數

printf "%i" (f 1 2)

let ff = function x -> function y -> x + y //function定義的匿名方法最多只能有一個參數

printf "%i" (ff 1 2)

let fff = function (x,y) -> x + y  //可以用元組將參數打包成一個參數

4、運算符重載 //但不知道爲什麼有些可用的運算符串組合會出語法錯誤

let (+*)  x y= x * y
printfn "%A" (2 +* 4)


5、List 列表 , F# 的列表主要的操作符是[ ] , 列表一旦確定就不能再被改變 , 只會生成新列表 (類似C#字符串String)
let a = [] //a是一個空元組
let b = ["a" ; "b"]//b是一個含有兩個元素的列表
let c = "c" :: b //將"c"和列表b連接起來   將單個元素和列表連接用::符號(兩個冒號)  
let d = "d"::"e"::[]
let e = "c" :: "d" :: d
let f = d @ e//將兩個列表進行連接用@符號

List.rev list //將list列表元素反向後生成新列表
List.iter (fun x -> printf "%s" x)  list //遍歷list列表,用方法(fun x -> printf "%s" x)來處理


6、List Comprehensions 列表含概 操作符 .. (雙英文句號)  默認只能從小到大 ,數字列表可以指定增長step值,當增長值爲負數時可以得到從小到大的數字列表,但字符不行
let a = [ 1 .. 10 ]  //  [0;1;2;3;4;5;6;7;8;9;10]
let b = [ 'A' .. 'D'] // [ 'A' ; 'B' ; 'C' ; 'D']
let c = [1..3..7] //中間的3爲增長step值   [1 ; 4 ; 7]
let d = [1..3..9] //結果還是 [1 ; 4 ; 7] 增長結果值不能直接等於9,取不超過9的最後一個值就是7
let e = [ 5 .. -1 .. 1] // 倒序列表[ 5 ; 4 ; 3 ; 2 ; 1 ]

7、用for語句產生List 或 Sequence
let a = [for x in 0..10 -> x] // [0;1;2;3;4;5;6;7;8;9;10]
let b = [for x in 0..5 do
for y in 0..5 -> x,y] //[(0,0);(0,1);(0,2);(0,3);(0,4);(0,5);(1,0);(1,1)........] 
或者
let b = [for x in 0..5 do
for y in 0..5 ->( x,y)] //[(0,0);(0,1);(0,2);(0,3);(0,4);(0,5);(1,0);(1,1)........]  結果用元組

let a = seq{for x in 0..10 -> x} //  seq[0;1;2;3;4;5;6;7;8;9;10]
let b = seq{for x in 0..5 do
for y in 0..5 -> x,y} //seq[(0,0);(0,1);(0,2);(0,3);(0,4);(0,5);(1,0);(1,1)........]

let c = [ for x in 1 .. 5  do if x%2=1 then yield x ] // [ 1 ; 3 ; 5 ]

let d = seq[ for x in 1 .. 7 do if x % 2 = 1 then yield x] // seq [ 1 ; 3 ; 5 ; 7 ]




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章