
The "definition" above can be minimally and naturally "coded up" from "first principles" (I mean, using nothing more than elementary arithmetic operations) as simply as this!:
let rec power =
fun u -> fun i ->
if i < 0 then 1.0 / (power u (-i))
else if i = 0 then 1.0 else u * (power u (i-1))
let rec fac = fun n -> if n = 0 then 1 else n * fac (n-1)
let pow = fun i -> fun u -> power u (2 * i + 1)
let coef = fun i -> (power (-1) i)/(fac (2 * i + 1))
let rec taylor =
fun i -> fun n -> fun u ->
if i = n then (coef i) * (pow i u)
else ((coef i) * (pow i u)) + (taylor (i + 1) n u)
let x = 0.78539816339744830961566084581988 (*pi/4*) in
taylor 0 3 x
We expect 0.70710678118654752440084436210485. I can get 0.70710646957517809, with the above which is correct to 6 decimal places. I came across this little example in Kluge's "Abstract Computing Machines" by the way, a title I'm happy to recommend to those who share my interest in symbolic computation!