% The Computer Language Benchmarks Game % http://shootout.alioth.debian.org/ % SWI-Prolog contributed by Anthony Borla, Christoph Bauer % converted to YAP by Isaac Gouy :- initialization(main). ack(0, N, Val) :- Val is N + 1, !. ack(M, 0, Val) :- M1 is M - 1, ack(M1, 1, Val), !. ack(M, N, Val) :- M1 is M - 1, N1 is N - 1, ack(M, N1, Val1), ack(M1, Val1, Val). fib(0, 1) :- !. fib(1, 1) :- !. fib(N, Val) :- N > 1, N1 is N-1, N2 is N1-1, fib(N2, Val2), fib(N1, Val1), Val is Val1 + Val2. fib_float(1.0, 1.0) :- !. fib_float(0.0, 1.0) :- !. fib_float(N, Val) :- N > 1, N1 is N-1, N2 is N1-1, fib_float(N2, Val2), fib_float(N1, Val1), Val is Val1 + Val2. tak(X, Y, Z, R) :- Y < X, X1 is X-1, Y1 is Y-1, Z1 is Z-1, tak(X1, Y, Z, A), tak(Y1, Z, X, B), tak(Z1, X, Y, C), tak(A, B, C, R), !. tak(_, _, Z, Z). main :- unix( argv([H|_]) ), number_atom(A,H), B is A-1, C is 27.0 + A, write('Ack(3,'), write(A), write('): '), ack(3, A, Val),!, write(Val), nl, write('Fib('), write(C), write('): '), fib_float(C,V), format('~1f', V), nl, !, X is 3*B, Y is 2*B, Z is B, write('Tak('), write(X), write(','), write(Y), write(','), write(Z), write('): '), tak(X,Y,Z,R), write(R), nl, write('Fib(3): '), fib(3,V1), write(V1), nl, write('Tak(3.0,2.0,1.0): '), tak(3.0,2.0,1.0,FR), format('~1f', FR), nl, statistics, statistics_jit.