// Learn more about F# at http://fsharp.net^
let data = [7; 31; 2; 3; 14; 5; 1009; 56; 9090];
let rec sort ax =
if ax = [] then [] else
let pivot = List.head ax
let left = [for v in List.tail ax do if v < pivot then yield v]
let right = [for v in List.tail ax do if v > pivot then yield v]
sort left @ [pivot] @ sort right
printfn "%A" (sort data)
let rec sort2 cmp ax =
if ax = [] then [] else
let pivot = List.head ax
let left = [for v in List.tail ax do if cmp v pivot then yield v]
let right = [for v in List.tail ax do if cmp pivot v then yield v]
sort2 cmp left @ [pivot] @ sort2 cmp right
printfn "%A" (sort2 (>) data)
printfn "%A" (sort2 (<) data)
let sort_asc ax = sort2 (>) ax
let sort_desc ax = sort2(<) ax
printfn "%A" (sort_asc data)
printfn "%A" (sort_desc data)
let filter_large z = List.filter (fun x -> x > z)
printfn "%A" (filter_large 1000 data)
//let data = [1; 2; 3; 4; 5]
let pr_int x = printfn "%d" x
let data2 = [for i in [0..500000] -> i]
// bad impl
let rec sum list =
match list with
| [] -> 0
| x::xs -> x + (sum xs)
// good impl
let sum2 list =
let rec sum list a =
match list with
| [] -> a
| x::xs -> sum xs (a + x)
sum list 0
//pr_int (sum data2)
pr_int (sum2 data2)
//let rec infinite_loop x = infinite_loop (x + 10)
//pr_int (infinite_loop 10)
let mul2 list =
let rec mul list a =
match list with
| [] -> a
| x::xs -> mul xs (a * x)
mul list 1
pr_int (mul2 data)
let rec process_list op acc list =
match list with
| [] -> acc
| x::xs -> process_list op (op acc x) xs
pr_int (process_list (*) 1 data)
let mul3 = process_list (*) 1
pr_int (mul3 data)
let mul4 = List.fold (*) 1
pr_int (mul4 data)
Tuesday, July 13, 2010
F# samples
Subscribe to:
Posts (Atom)