hyperoperation.frink

View or download 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]]

}


View or download 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 18354 days, 2 hours, 19 minutes ago.