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.. ...