FSharp-07-Collections-Mutable
Array创建操作
步长为1的数组
1234let a = [|0..10|]printfn $"%A{a}"[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]
步长为2的数组
1234let a = [|1..2..10|]// [|1; 3; 5; 7; 9|]printfn $"%A{a}"a
index
value
0
1
1
3
2
5
3
7
4
9
步长为-2的数组
12let a=[|10.. -2 ..0|]a
index
value
0
10
1
8
2
6
3
4
4
2
5
0
创建数组的其他方式 
12345let arr123 = [|    1    2    3 |]arr123
index
value
0
1
1
2
2
3
12let arrOfSquares = [| for i in 0 .. 10 -> i*i ...
FSharp-06-Function_Advance
Recursive Function
Fibonacci
recursion123456// Fibonacci 1 1 2 3 5 ...let rec f x =    match x with    | 1 -> 1     | 2 -> 1    | _ -> f (x-1) + f (x-2)
sum
conventional
12345let mutable x =0for i in [1..100] do x <- x+ ix// 5050
recursion
12345678let rec sum all result =     match all with     | head::tail ->         sum tail (result+head)    | [] -> resultsum [1..100] 0// 5050    
exercise
123456789101112131415// 求1..100的乘积// example1 let mutable x = 1for i in [1..10] do ...
FSharp-05-Match_and_if_then
if then else1234567891011// definelet f x =    if x % 2 = 0    then         "Even"    else         "Odd"// invoke  f 1 Odd      
12345678let g x =    if x =1 then "One"    elif x=2 then "Two"    elif x=3 then "Three"    else "Other"// Otherg 11
练习:  string -> int  “one” -> 1  “two” -> 2  “three” -> 3  _ -> 0
match with1234567let f x =    match (x % 2) with    | 0 -> "Even"    | 1 -> "Odd"f 2//  ...
FSharp-04-Loop
comparison
大于
110 > 10
小于
19< 12
等于
12// 数学意义的等于1.0 = 1.0
不等于
12// 不等于0.9999999  <> 1.0
大于等于
10.9999999  >= 1.0
小于等于
10.9999999  <= 1.0
与或非
12345678// Truetrue && true// Falsefalse && true// Truefalse || true// Truefalse |> not
for loop12345678910111213for i in [1..10] do    printfn $"{i}"    1    2    3    4    5    6    7    8    9    10   
123let list_1 =[0..10]for i in list_1 do    printfn $"{i}"
1
1234 ...
数据结构-2-排序算法的简单应用
归并排序应用1—小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。1234567[1, 3, 4, 2, 5]1 左边比 1 小的数,没有;3 左边比 3 小的数,1;4 左边比 4 小的数,1、3;2 左边比 2 小的数,1;5 左边比 5 小的数,1、3、4、 2;因此小和为 1 + 1 + 3 + 1 + 1 + 3 + 4 + 2 = 16
算法思想:
将左边小于arr[i]的和转换成求arr[i]右边的和,即原问题是求一个数左边比它小,并求和,转换成一个数右边比它大,并求和
merge过程
A.根据递归树,对于1,3,大于1的只有3,产生小和,递归结束,返回上层 [1 1]
B.对于1,3,4,遍历到1有两个比1大;遍历到3有一个比3大 [1 2; 3 1]
C.对于递归右部分2,5,一个比2大 [2 1]
D.返回上层递归,两端数组归并,对于右半部分,比1大的有两个,比3大的有一个,比4大的有一个 [1 4; 2 1; 3 2; 4 1; 5 0]
注意点
一定要排完序才能直到右边多少数比i大
当左右两侧相同时 ...
FSharp-03-Collections
List
**List元素默认不可变**
定义List
let list = [],空List
let list = [1..10],默认步长的List
let list = [1..2..10],步长为2的List
let list = [1;2;3],给定元素的List
注意list = [1,2,3]则是元组
exapmle
123// 定义Listlet list =[1..10]list
index
value
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
1234// printprintfn $"%A{list}"// answer[1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
123// 步长-2let list = [10..-2..0]list
index
value
0
10
1
8
2
6
3
4
4
2
5
0
切片操作1234let list = [0.. ...











