Fib.fib 5;;
Fib.fib 20;;
Fib.fib 30;;
Fib.fib 40;;
Fib.fib 5;;
#trace Fib.fib;;
Fib.fib 5;;
Fib.fib 40;;
Fib.fibpair 40;;
Fib.fibpair 400;;
Fib.fibpair 4000;;
Fib.fibpair 40000;;
Fib.fibpair 400000;;
let xs = IntLst.range 1 100000;;
let average xs = IntLst.sum xs / Lst.length xs;;
average xs;;
Profiler.run average xs;;
let rec sumlen = function
| [] -> (0,0)
| x::xs -> let (sum,len) = sumlen xs in (sum+x,len+1);;
let average1 xs = let (sum,len) = sumlen xs in sum/len;;
Profiler.run average1 xs;;
let rec sum n = if n <= 0 then 0 else n + sum (n-1);;
sum 1000000;;
sum 100000;;
let sumlen_tl xs = 
 let rec sumlen sum len = function 
  | [] -> (sum,len)
  | x::xs -> sumlen (sum+x) (len+1) xs
 in
 sumlen 0 0 xs;;
sumlen_tl [1;2;3;4];;
sumlen_tl (IntLst.range_tl 1 1000000);;
sumlen (IntLst.range_tl 1 1000000);;
let range_strange m n = 
 let rec range acc m n = 
  if m >= n then acc
  else range (m::acc) (m+1) n
 in
 range [] m n;;
range_strange 1 10;;
let rec reverse = function
 | [] -> []
 | x::xs -> reverse xs @ [x];;
reverse (IntLst.range_tl 1 1000000);;
Lst.rev (IntLst.range_tl 1 1000000);;
reverse (IntLst.range_tl 1 1000000);;
reverse (IntLst.range_tl 1 100000);;