(* sum_examples.ml * * Author: W. M. Farmer * Revised: October 13, 2008 * * Description: Several example implementations of the sum function, which * is the iterated addition represented by the capital sigma * operator. *) let simple_sum m n = let accum = ref 0 in for i = m to n do accum := !accum + i ; print_int !accum ; print_newline () done; !accum ;; let sum f m n = let accum = ref 0 in for i = m to n do accum := !accum + (f i) ; print_int !accum ; print_newline () done; !accum ;; let super_sum zero add f m n = let accum = ref zero in for i = m to n do accum := add !accum (f i) ; done; !accum ;; let factorial = super_sum 1 ( * ) (function x -> x) 1 ;; let rec simple_sum_rec m n = if m > n then 0 else m + (simple_sum_rec (m + 1) n) ;; let rec sum_rec f m n = if m > n then 0 else (f m) + (sum_rec f (m + 1) n) ;; let rec super_sum_rec zero add f m n = if m > n then zero else add (f m) (super_sum_rec zero add f (m + 1) n) ;; let factorial_rec = super_sum_rec 1 ( * ) (function x -> x) 1 ;;