Prolog (SWIPL), 129/137 octets
g(1,R):-u(3,4,R).
g(L,R):-M is L-1,g(M,P),u(3,P,R).
u(N,1,R):-R is 3**N.
u(1,_,3).
u(N,M,R):-K is N-1,L is M-1,u(K,M,Y),u(Y,L,R).
Pour sortir le numéro de Graham, interrogez pour g(64,G).
(si les 8 octets de cette requête doivent être comptés, la longueur est de 137 octets):
?- g(64, G).
ERROR: Out of local stack
Mais comme on peut s'y attendre, cela manque de pile.
Tester
?- u(3, 2, X).
X = 7625597484987
Le retour en arrière provoque son épuisement:
?- u(3, 2, X).
X = 7625597484987 ;
ERROR: Out of local stack
Ungolfed
La version non golfée ajoute la notation générale de la flèche vers le haut, pas seulement pour 3, et utilise des coupes et des contrôles pour éviter les retours en arrière et les situations non définies.
% up-arrow notation
u(X, 1, _M, X) :- !.
u(X, N, 1, R) :-
R is X**N, !.
u(X, N, M, R) :-
N > 1,
M > 1,
N1 is N - 1,
M1 is M - 1,
u(X, N1, M, R1),
u(X, R1, M1, R).
% graham's number
g(1,R) :- u(3, 3, 4, R), !.
g(L,R) :-
L > 1,
L1 is L - 1,
g(L1,G1),
u(3, G1, R).