/* Mtak benchmark in Picat. From http://www.jekejeke.ch/idatab/doclet/prod/en/docs/05_run/15_stdy/06_bench/09_programs/09_mtak/01_mtak.p.html This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ % import util. % import cp. main => go. /** * Prolog code for the tak function benchmark. * * McCarthys tak function. * Modification of the tarai function from Takeuchi. * * Copyright 2010-2012, XLOG Technologies GmbH, Switzerland * Jekejeke Prolog 0.8.3 (a fast and small prolog interpreter) */ fun(X,Y,Z,A), X =< Y => Z = A. fun(X,Y,Z,A) => X1 = X - 1, fun(X1,Y,Z,A1), Y1 = Y - 1, fun(Y1,Z,X,A2), Z1 = Z - 1, fun(Z1,X,Y,A3), fun(A1,A2,A3,A). mtak => fun(18, 12, 6, M), writeln(M). mtak2 => fun(18, 12, 6, _M). go => mtak. go2 => mtak2.