#light module Nine printfn "%A" ( match 1+1 with // p. 134 | 3 -> "three" | 2 -> "two" | _ -> "hmm" ) printfn "%A" ((fun x -> x+2) 1) let rec split = function | ([], lt, pivot) -> ([],[]) | (x::xs, lt, pivot) -> let (below,above) = split(xs, lt, pivot) if lt(x,pivot) then (x::below,above) else (below, x::above) let rec quicksort = function | ([], lt) -> [] | (pivot::rest, lt) -> let (below, above) = split(rest, lt, pivot) quicksort(below,lt)@[pivot] @quicksort(above,lt) let intBefore(a,b) = a a a>b)) let f (a, b) = a + b; // p. 138 printfn "%A" (f (2,3)) let g a = fun b -> a+b printfn "%A" (g 2 3) let add2 = g 2; // p. 139 printfn "%A" (add2 3) let h a b = a + b printfn "%A" (h 2 3) printfn "%A" (List.map not [true; false]) // p. 140 printfn "%A" (List.map (fun x->x+1) [1;2;3;4]) printfn "%A" (List.map ((+) 1) [1;2;3;4]) printfn "%A" (List.map (fun x->x%2=0) [1;2;3;4]) printfn "%A" (List.map (fun (a,b)->a+b) [(1,2);(3,4)]) let f1 = List.map (fun (a,b)->a+b) // p. 141 printfn "%A" (f1 [(1,2);(3,4)]) printfn "%A" (List.fold_right (+) [1;2;3;4] 0) // F# fold_right signature is different than ML printfn "%A" (List.fold_right (*) [1;2;3;4] 1) printfn "%A" (List.fold_right (+) ["abc";"def";"ghi"] "") printfn "%A" (List.fold_right (fun a b -> a::b) [1;2;3;4] [5]) let addup = List.fold_left (+) 0 // p. 142 printfn "%A" (addup [1;2;3;4;5]) let thin L = List.fold_right (fun a b -> if a<0 then b else a::b) L [] // p. 143 printfn "%A" (thin [-1;2;-3;4;-5;6]) printfn "%A" (List.fold_left (+) 0 [1;2;3;4]) printfn "%A" (List.fold_left (*) 1 [1;2;3;4]) printfn "%A" (List.fold_right (-) [1;2;3;4] 0) printfn "%A" (List.fold_left (-) 0 [1;2;3;4]) // (((0-1)-2)-3)-4 not 4-(3-(2-(1-0))) printfn "%A" (List.fold_left (+) "" ["abc";"def";"ghi"])