может тебе и синтаксис языка ATS понравится? :)
http://www.ats-lang.org/Examples.htmlA fully verified implementaion of the fib function in ATS can now be given as follows:
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)
| n_i: int(n-i), r0: int r0, r1: int r1
) : [r:int] (FIB(n, r) | int(r)) =
(
if (n_i > 0)
then
loop{i+1}
(
pf1, FIB2(pf0, pf1) | n_i-1, r1, r0+r1
) (* then *)
else (pf0 | r0)
// end of [if]
) (* end of [loop] *)
in
loop{0}(FIB0(*void*), FIB1(*void*) | n, 0, 1)
end // end of [fibats]