(* http://www.cs.nyu.edu/courses/summer07/G22.2110-001/hw08-sml-example.txt Rename this file into statistics.sml. *) fun real_square x : real = x * x; fun list_sum [] = 0.0 | list_sum (h::t) = h + list_sum t; fun arithmetic_mean x = list_sum x / real(length x); fun standard_deviation_helper ([] , _) = 0.0 | standard_deviation_helper (h::t, m) = real_square (h - m) + standard_deviation_helper (t, m); fun standard_deviation x = let val n = length x val m = arithmetic_mean x in Math.sqrt (standard_deviation_helper (x, m) / real(n)) end; fun input_list_of_real stream = let val dummy = print ("Please enter a floating point number, " ^ "or an empty line to end the list: ") val str = valOf (TextIO.inputLine stream) val opt = Real.fromString (substring (str, 0, size str - 1)) in case opt of SOME r => r :: (input_list_of_real stream) | NONE => [] end; let val l = input_list_of_real TextIO.stdIn val a = arithmetic_mean l val s = standard_deviation l in print ("arithmetic mean: " ^ (Real.toString a) ^ ", " ^ "standard deviation: " ^ (Real.toString s) ^ "\n") end;