(*
**
//
// Generic Fibonacci
//
** Author: Hongwei Xi
** Start Time: July, 2014
** Authoremail: hwxi AT gmail DOT com
**
*)
(* ****** ****** *)
//
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)
//
staload "./../DATS/gintinf_t.dats"
//
staload _ = "./../DATS/intinf_t.dats"
staload _ = "./../DATS/intinf_vt.dats"
//
(* ****** ****** *)
extern
fun{a:t0p} gfib(x: int): a
(* ****** ****** *)
implement
{a}(*tmp*)
gfib (x) = let
//
macdef gint = gnumber_int
macdef gadd = gadd_val_val
//
fun loop
(
x: int, res1: a, res2: a
) : a =
(
if x >= 1
then loop (x-1, res2, res1 \gadd res2) else res1
// end of [if]
)
//
in
loop (x, gint(0), gint(1))
end // end of [gfib]
(* ****** ****** *)
implement
main0 () =
{
//
val out = stdout_ref
val () = fprintln! (out, "fib(10) = ", gfib (10))
val () = fprintln! (out, "fib(50) = ", gfib (50))
val () = fprintln! (out, "fib(1000) = ", gfib (1000))
//
} (* end of [main0] *)
(* ****** ****** *)
(* end of [test06.dats] *)