hyperoperation.frink

Download or view hyperoperation.frink in plain text format


/** This implements the hyperoperation function, which is a generalization of
    several mathematical operators:

    * n = 0 : the unary successor function (returns b+1; a is ignored)
    * n = 1 : addition (a + b)       (a+1+1+1+1... b times)
    * n = 2 : multiplication (a * b) (a+a+a+a...   b times)
    * n = 3 : exponentiation (a^b)   (a*a*a*a...   b times)
    * n = 4 : tetration              (a^a^a^a ...  b times)
    * etc

   See:
   
   https://en.m.wikipedia.org/wiki/Hyperoperation
*/


/** Optimized version of hyperoperations. */
hyper[n, a, b] :=
{
   println["hyper[$n, $a, $b]"]
   if n == 0
      return b+1

   if n == 1
      return a + b

   if n == 2
      return a * b

   if b == 0
      return 1

   if n == 3
      return a^b

   return hyper[n-1, a, hyper[n, a, b-1]]

}


Download or view hyperoperation.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19355 days, 23 hours, 26 minutes ago.