!       ><HopeProgs$Dir>.SimpleInt         !
!                                          !
!------------------------------------------!
!                                          !
!  This is a collection of simple Hope     !
!  functions over integers.                !
!                                          !
!------------------------------------------!





dec AddDigit : num # num  -> num;
--- AddDigit(Number,Digit)  <=  (Number * 10) + Digit;



infix cat : 4;
dec cat : num # num -> num;
--- Number cat Digit  <=  (Number * 10) + Digit;



dec fact : num -> num;
--- fact 0  <=  1;
--- fact m  <=  m * fact(m-1);



dec gcd : num # num -> num;
--- gcd (first , second)
    <= if (first mod second) = 0
         then second
         else gcd ( second , (first mod second) );



dec ChangeBase : num # num -> num;
--- ChangeBase ( Number , Base )
    <= if (Number div Base) = 0
         then Number
         else ChangeBase((Number div Base),Base) cat (Number mod Base);


infix perm : 7;
dec perm : num # num -> num;
--- n perm r
    <= (fact n) div fact(n-r);



infix combl: 6;
dec combl : num # num -> num;
--- n combl r
    <= (fact n) div ( (n - r) * fact r );



infix combe: 7;
dec combe : num # num -> num;
--- n combe r
    <= (fact n) div ( (n - r) * fact r );



infix combg: 8;
dec combg : num # num -> num;
--- n combg r
    <= (fact n) div ( (n - r) * fact r );
