fun simpleMap(F,nil) = nil | simpleMap(F,x::xs) = F(x)::simpleMap(F,xs) exception EmptyList; fun reduce(F,nil) = raise EmptyList | reduce(F,[a]) = a | reduce(F,x::xs) = F(x, reduce(F,xs)); fun square(x:real) = x*x; fun plus(x:real,y) = x+y; fun variance(L) = let val n = real(length(L)) in reduce(plus,simpleMap(square,L))/n - square(reduce(plus,L)/n) end; variance([1.0, 2.0, 5.0, 8.0]);