On Fri, May 04, 2018 at 04:01:55AM +1000, Chris Angelico wrote: > On Fri, May 4, 2018 at 3:18 AM, Ed Kellett <e+python-id...@kellett.im> wrote:
> > def hyperop(n, a, b): > > return match (n, a, b): > > (0, _, b) => b + 1 > > (1, a, 0) => a > > (2, _, 0) => 0 > > (_, _, 0) => 1 > > (n, a, b) => hyperop(n-1, a, hyperop(n, a, b-1)) > > > > versus: > > > > def hyperop(n, a, b): > > if n == 0: > > return b + 1 > > if n == 1 and b == 0: > > return a > > if n == 2 and b == 0: > > return 0 > > if b == 0: > > return 1 > > return hyperop(n-1, a, hyperop(n, a, b-1)) > > I have no idea what this is actually doing It is the Hyperoperation function. https://en.wikipedia.org/wiki/Hyperoperation n is the parameter that specifies the "level" of the operation, and a, b are the arguments to the operation. hyperop(0, a, b) returns the successor of b (a is ignored) -- e.g. the successor of 1 is 2, the successor of 2 is 3, etc. hyperop(1, a, b) returns a+b (addition, or repeated successor); hyperop(2, a, b) returns a*b (multiplication, or repeated addition); hyperop(3, a, b) returns a**b, or a^b in the more usual mathematical notation (exponentiation, or repeated multiplication); hyperop(4, a, b) returns a^^b (tetration: repeated exponentiation; e.g. 3^^4 = 3^3^3^3 = 3^3^27 = 3^7625597484987 = a moderately large number); hyperop(5, a, b) returns a^^^b (pentation: repeated tetration, and if you thought 3^^4 was big, it's nothing compared to 3^^^4); and so forth. While this is really useful to mathematicians, in practice we're going to run out of memory before being able to calculate any of the larger values. If we converted the *entire universe* into memory, we'd still run out. So while it's a fascinating example for maths geeks, in practical terms we might as well re-write it as: def hyperop(n, a, b): raise MemoryError("you've got to be kidding") which aside from a few values close to zero, is nearly always the right thing to do :-) -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/