프롤로그 (SWIPL), 129/137 바이트
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).
Graham의 숫자를 출력하려면 다음을 쿼리하십시오 g(64,G).
(이 쿼리의 8 바이트를 계산할 경우 길이는 137 바이트).
?- g(64, G).
ERROR: Out of local stack
그러나 예상대로, 이것은 스택이 부족합니다.
테스트
?- u(3, 2, X).
X = 7625597484987
역 추적으로 인해 스택이 부족합니다.
?- u(3, 2, X).
X = 7625597484987 ;
ERROR: Out of local stack
언 골프
ungolfed 버전은 3이 아닌 일반적인 위쪽 화살표 표기법을 추가하고 잘라 내기 및 검사를 사용하여 역 추적 및 정의되지 않은 상황을 피합니다.
% 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).