function add ( x : integer ; y : integer ) return integer is begin return x + y ; end ; function add2 ( x : integer ; y : integer ) return integer is begin return add ( x , y ) + add ( x , y ) ; end ; function even ( x : integer ) return integer is begin if ( x / 2 ) * 2 = x then return 1 ; else return 0 ; end if ; end ; function slow_pow ( base : integer ; exponent : integer ) return integer is result : integer ; begin result := 1 ; for j in 1 .. exponent loop result := result * base ; end ; return result ; end ; function fib ( n : integer ) return integer is type table is array of integer ; values : table [ 10 ] ; begin values [ 0 ] := 1 ; values [ 1 ] := 1 ; for j in 2 .. n loop values [ j ] := values [ j - 1 ] + values [ j - 2 ] ; end ; return values [ n ] ; end ; function fib2 ( a : integer ; n : integer ) return integer is begin a [ 0 ] := 1 ; a [ 1 ] := 1 ; for j in 2 .. n loop a [ j ] := a [ j - 1 ] + a [ j - 2 ] ; end ; return a [ n ] ; end ; function recurse ( x : integer ) return integer is begin if x = 0 then return 0 ; else return recurse ( x - 1 ) + x ; end if ; end ; function pow ( base : integer ; exponent : integer ) return integer is temp : integer ; begin if exponent = 0 then return 1 ; end if ; if exponent = 1 then return base ; end if ; if ( even ( exponent ) ) then temp := pow ( base , exponent / 2 ) ; return temp * temp ; end if ; return base * pow ( base , exponent - 1 ) ; end ;