Please take a guess. Which of the following three is the fastest?
(* ****** ****** *) // fun {a:t0p} gfact1(n: int): a = let // overload * with gmul_int_val // in // (fix f( i: int , n: int, r: a): a => if i < n then f(i+1, n, (i+1)*r) else r // end of [if] )(0, n, gnumber_int<a>(1)) // end // end of [let] // end of [gfact1] // (* ****** ****** *) fun {a:t0p} gfact2(n: int): a = let // overload * with gmul_int_val // fun loop (xs: stream_vt(int), r0: a): a = ( case+ !xs of | ~stream_vt_nil () => r0 | ~stream_vt_cons (x0, xs) => loop(xs, (x0+1)*r0) ) // val _0_n_ = streamize_intrange_lr<>(0, n) // in loop(_0_n_, gnumber_int<a>(1)) end // end of [let] // end of [gfact2] (* ****** ****** *) fun {a:t0p} product (xs: stream_vt(a)): a = let // overload * with gmul_val_val // fun loop (xs: stream_vt(a), r0: a): a = ( case+ !xs of | ~stream_vt_nil() => r0 | ~stream_vt_cons(x0, xs) => loop(xs, r0*x0) ) // in loop(xs, gnumber_int<a>(1)) end // end of [product] fun {a:t0p} gfact3(n: int): a = product<a> (stream_vt_map_cloptr (streamize_intrange_lr<>(0, n), lam(i) => gnumber_int<a>(i+1)) ) (* end of [gfact3] *) -- You received this message because you are subscribed to the Google Groups "ats-lang-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to ats-lang-users+unsubscr...@googlegroups.com. To post to this group, send email to ats-lang-users@googlegroups.com. Visit this group at https://groups.google.com/group/ats-lang-users. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/350c21fd-cd10-4e37-b810-96e8ff7d4b4f%40googlegroups.com.