/* Burse's Benchmark in Picat v3. From Jan Burse's benchmark.pl https://gist.github.com/jburse/23091bf2d0de0f3d2417 Also see: "Jekejeke Runtime Benchmark" http://www.jekejeke.ch/idatab/rsclet/prod/docs/05_run/15_stdy/06_bench/package.pdf Note: Many of the benchmark instances are the same as in the van Roy benchmark collection. See http://hakank.org/picat/run_benchmark_v3.pi for comparison. Result: * Picat v3 $ picat3 benchmark_burse_v3.pi """ dummy in 0 (0 gc) ms nrev in 12 (0 gc) ms crypt in 66 (0 gc) ms deriv in 65 (0 gc) ms poly in 34 (0 gc) ms qsort in 41 (0 gc) ms tictac in 97 (0 gc) ms queens in 48 (0 gc) ms query in 131 (0 gc) ms mtak in 34 (0 gc) ms perfect in 130 (0 gc) ms calc in 52 (0 gc) ms Total in 710 (0 gc) ms """ Result from some Prologs which I happen to have on my computer. * B-Prolog (v8.1) """ dummy in 0 (0 gc) ms nrev in 26 (0 gc) ms crypt in 51 (0 gc) ms deriv in 56 (0 gc) ms poly in 26 (0 gc) ms qsort in 36 (0 gc) ms tictac in 87 (0 gc) ms queens in 37 (0 gc) ms query in 115 (0 gc) ms mtak in 25 (0 gc) ms perfect in 64 (0 gc) ms calc in 39 (0 gc) ms Total in 562 (0 gc) ms """ * SWI Prolog (v8.3.7) (without calc since it don't work) """ dummy in 2 (0 gc) ms nrev in 128 (0 gc) ms crypt in 331 (0 gc) ms deriv in 164 (0 gc) ms poly in 161 (0 gc) ms qsort in 222 (0 gc) ms tictac in 220 (0 gc) ms queens in 319 (0 gc) ms query in 727 (0 gc) ms mtak in 211 (0 gc) ms perfect in 228 (0 gc) ms (calc omitted) Total in 2711 (0 gc) ms """ * ECLiPSe (v 7.1development #1) Error on load in the program: type error: expected callable, found - * SICStus Prolog (v 4.3.5) """ dummy in 0 (0 gc) ms nrev in 20 (0 gc) ms crypt in 40 (0 gc) ms deriv in 20 (0 gc) ms poly in 20 (0 gc) ms qsort in 20 (0 gc) ms tictac in 40 (0 gc) ms queens in 30 (0 gc) ms query in 80 (0 gc) ms mtak in 20 (0 gc) ms perfect in 340 (0 gc) ms calc in 30 (0 gc) ms Total in 660 (0 gc) ms """ * YAP (v6.2.2) """ dummy in 0 (0 gc) ms nrev in 38 (0 gc) ms crypt in 64 (0 gc) ms deriv in 51 (0 gc) ms poly in 39 (0 gc) ms qsort in 47 (0 gc) ms tictac in 79 (0 gc) ms queens in 45 (0 gc) ms query in 126 (0 gc) ms mtak in 42 (0 gc) ms perfect in 119 (0 gc) ms calc in 48 (0 gc) ms Total in 698 (0 gc) ms """ * JekeJeke (v 1.3.8 ) Running the monolith Prolog file give this error: Error: Superfluous token. expr(Z) --> "-", !, term(X), {Y is -X}, expr_rest(Y, Z). I then ran the test suite jekejeke-samples/jekrun/benchmark/harness/jekejeke.p which seems to be the same. """ dummy in 17 (0 gc) ms nrev in 477 (6 gc) ms crypt in 397 (3 gc) ms deriv in 317 (3 gc) ms poly in 319 (4 gc) ms sortq in 513 (3 gc) ms tictac in 563 (0 gc) ms queens in 522 (3 gc) ms query in 645 (0 gc) ms mtak in 555 (3 gc) ms perfect in 380 (3 gc) ms calc in 345 (0 gc) ms Total in 5033 (28 gc) ms """ * XSB (v3.5.0) """ dummy in 0.0008 (0 gc) ms nrev in 0.0606 (0 gc) ms crypt in 0.0760 (0 gc) ms deriv in 0.1264 (0 gc) ms poly in 0.0773 (0 gc) ms qsort in 0.0873 (0 gc) ms tictac in 0.1640 (0 gc) ms queens in 0.0734 (0 gc) ms query in 0.1593 (0 gc) ms mtak in 0.0760 (0 gc) ms perfect in 0.0731 (0 gc) ms calc in 0.1372 (0 gc) ms Total in 1.1107 (0 gc) ms """ * BinProlog (vBinProlog, #12.01) """ dummy\tin 1\t(0 gc) ms nrev\tin 37\t(0 gc) ms crypt\tin 55\t(0 gc) ms deriv\tin 133\t(0 gc) ms poly\tin 58\t(0 gc) ms qsort\tin 76\t(0 gc) ms tictac\tin 178\t(0 gc) ms queens\tin 57\t(0 gc) ms query\tin 211\t(0 gc) ms mtak\tin 86\t(0 gc) ms perfect\tin 75\t(0 gc) ms calc\tin 126\t(0 gc) ms Total\tin 1092\t(0 gc) ms """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ main => go. go ?=> suite,suite, nl. go => true. /** * LPA Prolog code for the benchmark harness. * All test cases, the utility, the suite in one file. * Replaced rem/1, not available in LPA, by mod/1. * Removed meta_predicate/1, not available in LPA. * * To build optimized version use optimize_files/1. * To run optimized version pick .pc file. * * Copyright 2016, XLOG Technologies GmbH, Switzerland * Jekejeke Prolog 1.1.1 (a fast and small prolog interpreter) */ uptime(X) :- statistics(runtime, [X|_]). gctime(0). /** * Prolog code for the DCG calculator. * * DCGs are a simple case of Colmerauers Metamorphosis grammars * an were presented to the community in the 1980 paper * Definite Clause Grammars for Language Analysis, by F.C.N. * Pereira and D.H.D. Warren. * * The DCG calculator is usually considered Prolog homework. */ % expr(-Integer) expr(Z) --> "-", !, term(X), {Y is -X}, expr_rest(Y, Z). expr(Y) --> term(X), expr_rest(X, Y). % expr_rest(+Integer, -Integer) expr_rest(X, T) --> "+", !, term(Y), {Z is X+Y}, expr_rest(Z, T). expr_rest(X, T) --> "-", !, term(Y), {Z is X-Y}, expr_rest(Z, T). expr_rest(X ,X) --> []. % term(-Integer) term(Y) --> factor(X), term_rest(X, Y). % term_rest(+Integer, -Integer) term_rest(X, T) --> "*", !, factor(Y), {Z is X*Y}, factor_rest(Z, T). term_rest(X, T) --> "/", !, factor(Y), {Z is X/Y}, factor_rest(Z, T). term_rest(X, X) --> []. % factor(-Integer) factor(X) --> "(", !, expr(X), ")". factor(Y) --> digitx(X), factor_rest(X, Y). % factor_rest(+Integer, -Integer) factor_rest(X, T) --> digitx(Y), !, {Z is X*10+Y}, factor_rest(Z, T). factor_rest(X, X) --> []. % digit(-Integer) digitx(Y) --> [X], {OrdX = ord(X), 48= oddx/1 % oddx(-Integer) oddx(1). oddx(3). oddx(5). oddx(7). oddx(9). % hakank: renamed even/1 -> evenx/1 % evenx(-Integer) evenx(0). evenx(2). evenx(4). evenx(6). evenx(8). % leftevenx(-Integer) leftevenx(2). leftevenx(4). leftevenx(6). leftevenx(8). % crypt % (odd/1 -> oddx/1, evenx/1 -> evenx/1) crypt :- oddx(A), evenx(B), evenx(C), evenx(E), mult([C, B, A], E, [I, H, G, F | X]), leftevenx(F), oddx(G), evenx(H), evenx(I), zero(X), leftevenx(D), mult([C, B, A], D, [L, K, J | Y]), leftevenx(J), oddx(K), evenx(L), zero(Y), sum2([I, H, G, F], [0, L, K, J], [P, O, N, M | Z]), oddx(M), oddx(N), evenx(O), evenx(P), zero(Z). /** * Prolog code for the symbolic derivation benchmark. * * This is the benchmark of page 222 of: * Warren, D.H.D. (1983): Applied Logic - Its Use and * Implementation as a Programming Tool, * Technical Note 290, SRI International, 1983 */ % d(+Expr, +Var, -Expr) d(U + V, X, DU + DV) :- !, d(U, X, DU), d(V, X, DV). d(U - V, X, DU - DV) :- !, d(U, X, DU), d(V, X, DV). d(U * V, X, DU * V + U * DV) :- !, d(U, X, DU), d(V, X, DV). d(U / V, X, (DU * V - U * DV) / ^(V, 2)) :- !, d(U, X, DU), d(V, X, DV). d(^(U, N), X, DU * N * ^(U, N1)) :- !, N1 is N - 1, d(U, X, DU). d(-U, X, -DU) :- !, d(U, X, DU). d(exp(U), X, exp(U) * DU) :- !, d(U, X, DU). d(log(U), X, DU / U) :- !, d(U, X, DU). d(X, X, 1) :- !. d(_, _, 0). % ops8(-Expr) ops8(E) :- % hakank: $ escape d($(x + 1) * ((^(x, 2) + 2) * (^(x, 3) + 3)), x, E). % divide10(-Expr) divide10(E) :- % hakank: $ escape d($((((((((x / x) / x) / x) / x) / x) / x) / x) / x) / x, x, E). % hakank: renamed log10/1 -> log10x/1 % log10(-Expr) log10x(E) :- % hakank: $ escape d($log(log(log(log(log(log(log(log(log(log(x)))))))))), x, E). % times10(-Expr) times10(E) :- % hakank: $ escape d($((((((((x * x) * x) * x) * x) * x) * x) * x) * x) * x, x, E). % deriv deriv :- ops8(_), divide10(_), log10x(_), times10(_). /** * Prolog code for the tak function benchmark. * * McCarthys tak function. * Modification of the tarai function from Takeuchi. */ % fun(+Integer, +Integer, +Integer, -Integer) fun(X, Y, Z, A) :- X =< Y, !, Z = A. fun(X, Y, Z, A) :- X1 is X - 1, fun(X1, Y, Z, A1), Y1 is Y - 1, fun(Y1, Z, X, A2), Z1 is Z - 1, fun(Z1, X, Y, A3), fun(A1, A2, A3, A). % mtak mtak :- fun(18, 12, 6, _). /** * Prolog code for the naïve reverse benchmark. * * This is the benchmark of page 219 of: * Warren, D.H.D. (1983): Applied Logic - Its Use and * Implementation as a Programming Tool, * Technical Note 290, SRI International, 1983 */ % rev(+List, -List) rev([], []). rev([X|Rest], Ans) :- rev(Rest, L), concatenate(L, [X], Ans). % concatenate(+List, +List, -List) concatenate([], L, L). concatenate([X|L1], L2, [X|L3]) :- concatenate(L1, L2, L3). % datanrev(-List) datanrev([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30]). % nrev nrev :- datanrev(X), rev(X, _). /** * Prolog code for finding a perfect number. * * A solution that did not make use of findall/3 and rem/2 * was posted Dec 16, 1988 on comp.lang.prolog by Thomas * Sj|land. It was titled Christmas pleasure and contained * an invitation to further dig into Euclids theorem. */ % between1(+Integer, +Integer, -Integer) between1(Lo, Hi, _) :- Lo > Hi, !, fail. between1(Lo, _, Lo). between1(Lo, Hi, X) :- Lo2 is Lo+1, between1(Lo2, Hi, X). % sumlist1(+List, -Integer) sumlist1([], 0). sumlist1([X|Y], R) :- sumlist1(Y, H), R is X+H. % perfect(+Integer, -Integer) perfect(Hi, X) :- between1(1, Hi, X), Y is X // 2, % bp.findall(Z, $(between1(1,Y,Z), (X mod Z =:= 0)), L), L = find_all(Z, (between1(1,Y,Z), (X mod Z =:= 0))), % hakank sumlist1(L, X). % perfect perfect :- perfect(500, _). /** * Prolog code for the polynominal reduction benchmark. * * This benchmark can be found in: * Haygood, R. (1989): A Prolog Benchmark Suite for Aquarius, * Computer Science Division, University of California * Berkely, April 30, 1989 * * It has its root in some Lisp code by R.P. Gabriel. * * We used a brushed up version where polynomials are better * normalized. Therefore we find some additional predicates * such as make_poly/3 and make_term/4. */ % make_poly(+Sum, +Var, -Expr) make_poly([], _, 0) :- !. make_poly(Terms, Var, poly(Var,Terms)). % poly_add(+Expr, +Expr, -Expr) poly_add(poly(Var,Terms1), poly(Var,Terms2), Res) :- !, term_add(Terms1, Terms2, Terms), make_poly(Terms, Var, Res). poly_add(poly(Var1,Terms1), poly(Var2,Terms2), poly(Var1,Terms)) :- Var1 @< Var2, !, add_to_order_zero_term(Terms1, $poly(Var2,Terms2), Terms). poly_add(Poly, poly(Var,Terms2), poly(Var,Terms)) :- !, add_to_order_zero_term(Terms2, Poly, Terms). poly_add(poly(Var,Terms1), C, poly(Var,Terms)) :- !, add_to_order_zero_term(Terms1, C, Terms). poly_add(C1, C2, C) :- C is C1 + C2. % make_term(+Expr, +Integer, +Sum, -Sum) make_term(0, _, Terms, Terms) :- !. make_term(C, E, Terms, [term(E,C)|Terms]). % term_add(+Sum, +Sum, -Sum) term_add([], X, X) :- !. term_add(X, [], X) :- !. term_add([term(E,C1)|Terms1], [term(E,C2)|Terms2], Res) :- !, poly_add(C1, C2, C), term_add(Terms1, Terms2, Terms), make_term(C, E, Terms, Res). term_add([term(E1,C1)|Terms1], [term(E2,C2)|Terms2], [term(E1,C1)|Terms]) :- E1 < E2, !, term_add(Terms1, $[term(E2,C2)|Terms2], Terms). % hakank: added $ term_add(Terms1, [term(E2,C2)|Terms2], [term(E2,C2)|Terms]) :- term_add(Terms1, Terms2, Terms). % add_to_order_zero_term(+Sum, +Expr, -Sum) add_to_order_zero_term([term(0,C1)|Terms], C2, [term(0,C)|Terms]) :- !, poly_add(C1, C2, C). add_to_order_zero_term(Terms, C, [term(0,C)|Terms]). % poly_mul(+Expr, +Expr, -Expr) poly_mul(poly(Var,Terms1), poly(Var,Terms2), poly(Var,Terms)) :- !, term_mul(Terms1, Terms2, Terms). poly_mul(poly(Var1,Terms1), poly(Var2,Terms2), poly(Var1,Terms)) :- Var1 @< Var2, !, mul_through(Terms1, $poly(Var2,Terms2), Terms). poly_mul(P, poly(Var,Terms2), Res) :- !, mul_through(Terms2, P, Terms), make_poly(Terms,Var,Res). poly_mul(poly(Var,Terms1), C, Res) :- !, mul_through(Terms1, C, Terms), make_poly(Terms,Var,Res). poly_mul(C1, C2, C) :- C is C1 * C2. % term_mul(+Sum, +Sum, -Sum) term_mul([], _, []) :- !. term_mul(_, [], []) :- !. term_mul([Term|Terms1], Terms2, Terms) :- single_term_mul(Terms2, Term, PartA), term_mul(Terms1, Terms2, PartB), term_add(PartA, PartB, Terms). % single_term_mul(+Sum, +Summand, -Sum) single_term_mul([], _, []). single_term_mul([term(E1,C1)|Terms1], term(E2,C2), [term(E,C)|Terms]) :- E is E1 + E2, poly_mul(C1, C2, C), single_term_mul(Terms1, $term(E2,C2), Terms). % hakank: added $ % mul_through(+Sum, +Expr, -Sum) mul_through([], _, []). mul_through([term(E,Term)|Terms], Poly, Res) :- poly_mul(Term, Poly, NewTerm), mul_through(Terms, Poly, NewTerms), make_term(NewTerm, E, NewTerms, Res). % poly_expr(+Integer, +Expr, -Expr) poly_exp(0, _, 1) :- !. poly_exp(N, Poly, Result) :- N mod 2 =:= 0, !, M is N // 2, poly_exp(M, Poly, Part), poly_mul(Part, Part, Result). poly_exp(N, Poly, Result) :- M is N - 1, poly_exp(M, Poly, Part), poly_mul(Poly, Part, Result). % poly poly :- poly_add(1, $poly(x,[term(1,-1)]), X1), % hakank: added $ poly_add(X1, $poly(y,[term(1,1)]), X2), poly_add(X2, $poly(z,[term(1,-1)]), X3), poly_exp(10, X3, _). /** * Prolog code for the quick sort benchmark. * * This is the benchmark of page 220 of: * Warren, D.H.D. (1983): Applied Logic - Its Use and * Implementation as a Programming Tool, * Technical Note 290, SRI International, 1983 */ % partition(+List, +Integer, -List, -List) partition([], _, [], []). partition([X|L], Y, [X|L1], L2) :- X =< Y, !, partition(L, Y, L1, L2). partition([X|L], Y, L1, [X|L2]) :- partition(L, Y, L1, L2). % qsort(+List, +List, -List) qsort([], R, R). qsort([X|L], R0, R) :- partition(L, X, L1, L2), qsort(L2, R0, R1), qsort(L1, [X|R1], R). % dataqsort(+List) dataqsort([27,74,17,33,94,18,46,83,65,2,32,53,28,85,99, 47,28,82,6,11,55,29,39,81,90,37,10,0,66,51, 7,21,85,27,31,63,75,4,95,99,11,28,61,74,18, 92,40,53,59,8]). % qsort qsort :- dataqsort(X), qsort(X, [], _). /** * Prolog code for the 9x9-queens benchmark. * * Originally conceived in by Max Bezzel for the 8x8 checker board. * Used by Edsger Dijkstra to illustrate the * depth-first backtracking search algorithm. */ % nodiag(+List, +Integer, +Integer) nodiag([], _, _). nodiag([N|L], B, D) :- D =\= N - B, D =\= B - N, D1 is D + 1, nodiag(L, B, D1). % qdelete(+List, -Integer, +Integer, -List) qdelete(L, A, A, L). qdelete([H|T], X, A, [A|R]) :- qdelete(T, X, H, R). % search(+List, +List, -List) search([], _, []). search([H|T], History, [Q|M]) :- qdelete(T, Q, H, L1), nodiag(History, Q, 1), search(L1, [Q|History], M). % dataqueens(-List) dataqueens([1,2,3,4,5,6,7,8,9]). % queens queens :- dataqueens(X), search(X, [], _). /** * Prolog code for the database query benchmark. * * This is the benchmark of page 226 of: * Warren, D.H.D. (1983): Applied Logic - Its Use and * Implementation as a Programming Tool, * Technical Note 290, SRI International, 1983 * * We use integer division instead of float division, * since float division is not yet available in Jekejeke * Prolog 0.8.4. Further complication by two temporary * variables T1 and T2. */ % pop(-Atom, -Integer) pop(china, 8250). pop(india, 5863). pop(ussr, 2521). pop(usa, 2119). pop(indonesia, 1276). pop(japan, 1097). pop(brazil, 1042). pop(bangladesh, 750). pop(pakistan, 682). pop(w_germany, 620). pop(nigeria, 613). pop(mexico, 581). pop(uk, 559). pop(italy, 554). pop(france, 525). pop(philippines, 415). pop(thailand, 410). pop(turkey, 383). pop(egypt, 364). pop(spain, 352). pop(poland, 337). pop(s_korea, 335). pop(iran, 320). pop(ethiopia, 272). pop(argentina, 251). % area(-Atom, -Integer) area(china, 3380). area(india, 1139). area(ussr, 8708). area(usa, 3609). area(indonesia, 570). area(japan, 148). area(brazil, 3288). area(bangladesh, 55). area(pakistan, 311). area(w_germany, 96). area(nigeria, 373). area(mexico, 764). area(uk, 86). area(italy, 116). area(france, 213). area(philippines, 90). area(thailand, 200). area(turkey, 296). area(egypt, 386). area(spain, 190). area(poland, 121). area(s_korea, 37). area(iran, 628). area(ethiopia, 350). area(argentina, 1080). % density(-Atom, -Integer) density(C, D) :- pop(C, P), area(C, A), D is P*100 // A. % query query :- density(_, D1), density(_, D2), D1 > D2, T1 is 20 * D1, T2 is 21 * D2, T1 < T2. /** * Prolog code for the tic-tac-toe game. * * Min-max search via negation. * * Warranty & Liability * To the extent permitted by applicable law and unless explicitly * otherwise agreed upon, XLOG Technologies GmbH makes no warranties * regarding the provided information. XLOG Technologies GmbH assumes * no liability that any problems might be solved with the information * provided by XLOG Technologies GmbH. * * Rights & License * All industrial property rights regarding the information - copyright * and patent rights in particular - are the sole property of XLOG * Technologies GmbH. If the company was not the originator of some * excerpts, XLOG Technologies GmbH has at least obtained the right to * reproduce, change and translate the information. * * Reproduction is restricted to the whole unaltered document. Reproduction * of the information is only allowed for non-commercial uses. Selling, * giving away or letting of the execution of the library is prohibited. * The library can be distributed as part of your applications and libraries * for execution provided this comment remains unchanged. * * Trademarks * Jekejeke is a registered trademark of XLOG Technologies GmbH. */ % move(+Board, +Player, -Board) move([[-,B,C],[D,E,F],[G,H,I]], P, [[P,B,C],[D,E,F],[G,H,I]]). move([[A,-,C],[D,E,F],[G,H,I]], P, [[A,P,C],[D,E,F],[G,H,I]]). move([[A,B,-],[D,E,F],[G,H,I]], P, [[A,B,P],[D,E,F],[G,H,I]]). move([[A,B,C],[-,E,F],[G,H,I]], P, [[A,B,C],[P,E,F],[G,H,I]]). move([[A,B,C],[D,-,F],[G,H,I]], P, [[A,B,C],[D,P,F],[G,H,I]]). move([[A,B,C],[D,E,-],[G,H,I]], P, [[A,B,C],[D,E,P],[G,H,I]]). move([[A,B,C],[D,E,F],[-,H,I]], P, [[A,B,C],[D,E,F],[P,H,I]]). move([[A,B,C],[D,E,F],[G,-,I]], P, [[A,B,C],[D,E,F],[G,P,I]]). move([[A,B,C],[D,E,F],[G,H,-]], P, [[A,B,C],[D,E,F],[G,H,P]]). % init(+Board) init([[-,-,-],[-,-,-],[-,-,-]]). % win(+Board, +Player) win([[P,P,P],[_,_,_],[_,_,_]], P). win([[_,_,_],[P,P,P],[_,_,_]], P). win([[_,_,_],[_,_,_],[P,P,P]], P). win([[P,_,_],[P,_,_],[P,_,_]], P). win([[_,P,_],[_,P,_],[_,P,_]], P). win([[_,_,P],[_,_,P],[_,_,P]], P). win([[P,_,_],[_,P,_],[_,_,P]], P). win([[_,_,P],[_,P,_],[P,_,_]], P). % other(+Player, -Player). other(o, x). other(x, o). % tie(+Board, +Player) tie(X, P) :- \+ move(X, P, _). % best(+Board, +Player, -Board) best(X, P, Y) :- move(X, P, Y), (win(Y, P) -> true; other(P, Q), \+ tie(Y, Q), \+ best(Y, Q, _)). % tictac tictac :- init(X), best(X, x, _). /** * The Prolog text for the testing utilities. * * Copyright 2010-2014, XLOG Technologies GmbH, Switzerland * Jekejeke Prolog 0.9.0 (a fast and small prolog interpreter) */ for(_). for(N) :- N > 1, M is N - 1, for(M). % test(N, X) :- for(N), my_call(X), fail. test(N, X) :- for(N), call(X), fail. test(_, _). show(T, G) :- print('\tin '), print(T), print('\t('), print(G), print(' gc) ms'), nl. bench(M, X, T, G) :- uptime(T1), gctime(G1), test(M, X), uptime(T2), gctime(G2), T is T2 - T1, G is G2 - G1, print(X), show(T, G). dummy. my_call(dummy) => dummy. my_call(nrev) => nrev. my_call(crypt) => crypt. my_call(deriv) => deriv. my_call(poly) => poly. my_call(qsort) => qsort. my_call(tictac) => tictac. my_call(queens) => queens. my_call(query) => query. my_call(mtak) => mtak. my_call(perfect) => perfect. my_call(calc) => calc. /** * The Prolog text that defines the test suite. * * Copyright 2014, XLOG Technologies GmbH, Switzerland * Jekejeke Prolog 1.0.3 (a fast and small prolog interpreter) */ suite :- bench(3001, dummy, _, _), bench(6001, nrev, T1, G1), bench(301, crypt, T2, G2), bench(30001, deriv, T3, G3), bench(61, poly, T4, G4), bench(6001, qsort, T5, G5), bench(11, tictac, T6, G6), bench(16, queens, T7, G7), bench(3001, query, T8, G8), bench(31, mtak, T9, G9), bench(16, perfect, T10, G10), bench(20001, calc, T11, G11), T is T1+T2+T3+T4+T5+T6+T7+T8+T9+T10+T11, G is G1+G2+G3+G4+G5+G6+G7+G8+G9+G10+G11, print('Total'), show(T, G), nl.