11 lines
393 B
Plaintext
11 lines
393 B
Plaintext
:- func ack(integer, integer) = integer.
|
|
ack(M, N) = R :- ack(M, N, R).
|
|
|
|
:- pred ack(integer::in, integer::in, integer::out) is det.
|
|
ack(M, N, R) :-
|
|
( ( M < integer(0)
|
|
; N < integer(0) ) -> throw(bounds_error)
|
|
; M = integer(0) -> R = N + integer(1)
|
|
; N = integer(0) -> ack(M - integer(1), integer(1), R)
|
|
; ack(M - integer(1), ack(M, N - integer(1)), R) ).
|