4
# Cython version of Knuth's "man or boy" test -- "It separates the man
5
# Algol 60 compilers from the boy Algol 60 compilers." Here's the
6
# original (from wikipedia):
9
# real procedure A (k, x1, x2, x3, x4, x5);
14
# B:= A := A (k, B, x1, x2, x3, x4);
16
# if k <= 0 then A:= x4 + x5 else B;
18
# outreal (A (10, 1, -1, -1, 1, 0));
21
# and a table of values:
36
# Past 10 or so, we blow the C stack -- can't just set a higher recursion limit
37
# to get around that one.
41
if isinstance(val, int):
46
def a(in_k, x1, x2, x3, x4, x5):
49
>>> old_limit = sys.getrecursionlimit()
50
>>> sys.setrecursionlimit(1350 if not getattr(sys, 'pypy_version_info', None) else 2700)
52
>>> a(10, 1, -1, -1, 1, 0)
55
>>> sys.setrecursionlimit(old_limit)
60
return a(k[0], b, x1, x2, x3, x4)
61
return compute(x4) + compute(x5) if k[0] <= 0 else b()