The notion of “hyper operation” extends the intuition that multiplication is
repeated addition, exponentiation is repeated multiplication, tetration is
repeated exponentiation, and so on.
Hyperoperation can be defined piecewise (per Wikipedia) as:
/ b+1 if n = 0
| a if n = 1, b = 0
H_n(a,b) = | 0 if n = 2, b = 0
| 1 if n >= 3, b = 0
\ H_n-1( a, H_n(a, b-1) ) otherwise
Or, in J:
H =: adverb define
:
if. 0=m do.
1+y
elseif. (m > 0) *. (0=y) do.
(<:3<.m) { x,0,1
elseif. do.
x (<:m) H x m H <:y
end.
)
Now, while J likes 2 (0 H) 3, 2 (1 H) 3, 2 (2 H) 3, and 2 (3 H) 3 just fine,
producing the expected results [1], it silently crashes (i.e. the IDE simply
disappears) on 2 (4 H) 3 .
Now, I’m sure 2 tetration 3 is some absurdly large number and I wouldn’t
expect a result, but I’d prefer a stack error (or whatever) to a crash.
-Dan
[1] Representing successor, addition, multiplication, and exponentiation
respectively.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm