Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
2
Task/Fibonacci-sequence/ATS/fibonacci-sequence-1.ats
Normal file
2
Task/Fibonacci-sequence/ATS/fibonacci-sequence-1.ats
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
fun fib_rec(n: int): int =
|
||||
if n >= 2 then fib_rec(n-1) + fib_rec(n-2) else n
|
||||
9
Task/Fibonacci-sequence/ATS/fibonacci-sequence-2.ats
Normal file
9
Task/Fibonacci-sequence/ATS/fibonacci-sequence-2.ats
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
(*
|
||||
** This one is also referred to as being tail-recursive
|
||||
*)
|
||||
fun
|
||||
fib_trec(n: int): int =
|
||||
if
|
||||
n > 0
|
||||
then (fix loop (i:int, r0:int, r1:int): int => if i > 1 then loop (i-1, r1, r0+r1) else r1)(n, 0, 1)
|
||||
else 0
|
||||
27
Task/Fibonacci-sequence/ATS/fibonacci-sequence-3.ats
Normal file
27
Task/Fibonacci-sequence/ATS/fibonacci-sequence-3.ats
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
(*
|
||||
** This implementation is verified!
|
||||
*)
|
||||
|
||||
dataprop FIB (int, int) =
|
||||
| FIB0 (0, 0) | FIB1 (1, 1)
|
||||
| {n:nat} {r0,r1:int} FIB2 (n+2, r0+r1) of (FIB (n, r0), FIB (n+1, r1))
|
||||
// end of [FIB] // end of [dataprop]
|
||||
|
||||
fun
|
||||
fibats{n:nat}
|
||||
(n: int (n))
|
||||
: [r:int] (FIB (n, r) | int r) = let
|
||||
fun loop
|
||||
{i:nat | i <= n}{r0,r1:int}
|
||||
(
|
||||
pf0: FIB (i, r0), pf1: FIB (i+1, r1)
|
||||
| ni: int (n-i), r0: int r0, r1: int r1
|
||||
) : [r:int] (FIB (n, r) | int r) =
|
||||
if (ni > 0)
|
||||
then loop{i+1}(pf1, FIB2 (pf0, pf1) | ni - 1, r1, r0 + r1)
|
||||
else (pf0 | r0)
|
||||
// end of [if]
|
||||
// end of [loop]
|
||||
in
|
||||
loop {0} (FIB0 (), FIB1 () | n, 0, 1)
|
||||
end // end of [fibats]
|
||||
79
Task/Fibonacci-sequence/ATS/fibonacci-sequence-4.ats
Normal file
79
Task/Fibonacci-sequence/ATS/fibonacci-sequence-4.ats
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
(* ****** ****** *)
|
||||
//
|
||||
// How to compile:
|
||||
// patscc -o fib fib.dats
|
||||
//
|
||||
(* ****** ****** *)
|
||||
//
|
||||
#include
|
||||
"share/atspre_staload.hats"
|
||||
//
|
||||
(* ****** ****** *)
|
||||
//
|
||||
abst@ype
|
||||
int3_t0ype =
|
||||
(int, int, int)
|
||||
//
|
||||
typedef int3 = int3_t0ype
|
||||
//
|
||||
(* ****** ****** *)
|
||||
|
||||
extern
|
||||
fun int3 : (int, int, int) -<> int3
|
||||
extern
|
||||
fun int3_1 : int3 -<> int
|
||||
extern
|
||||
fun mul_int3_int3: (int3, int3) -<> int3
|
||||
|
||||
(* ****** ****** *)
|
||||
|
||||
local
|
||||
|
||||
assume
|
||||
int3_t0ype = (int, int, int)
|
||||
|
||||
in (* in-of-local *)
|
||||
//
|
||||
implement
|
||||
int3 (x, y, z) = @(x, y, z)
|
||||
//
|
||||
implement int3_1 (xyz) = xyz.1
|
||||
//
|
||||
implement
|
||||
mul_int3_int3
|
||||
(
|
||||
@(a,b,c), @(d,e,f)
|
||||
) =
|
||||
(a*d + b*e, a*e + b*f, b*e + c*f)
|
||||
//
|
||||
end // end of [local]
|
||||
|
||||
(* ****** ****** *)
|
||||
//
|
||||
implement
|
||||
gnumber_int<int3> (n) = int3(n, 0, n)
|
||||
//
|
||||
implement gmul_val<int3> = mul_int3_int3
|
||||
//
|
||||
(* ****** ****** *)
|
||||
//
|
||||
fun
|
||||
fib (n: intGte(0)): int =
|
||||
int3_1(gpow_int_val<int3> (n, int3(1, 1, 0)))
|
||||
//
|
||||
(* ****** ****** *)
|
||||
|
||||
implement
|
||||
main0 () =
|
||||
{
|
||||
//
|
||||
val N = 10
|
||||
val () = println! ("fib(", N, ") = ", fib(N))
|
||||
val N = 20
|
||||
val () = println! ("fib(", N, ") = ", fib(N))
|
||||
val N = 30
|
||||
val () = println! ("fib(", N, ") = ", fib(N))
|
||||
val N = 40
|
||||
val () = println! ("fib(", N, ") = ", fib(N))
|
||||
//
|
||||
} (* end of [main0] *)
|
||||
Loading…
Add table
Add a link
Reference in a new issue