-- La función de Takeuchi en Haskell

tak :: Integer -> Integer -> Integer -> Integer
tak x y z
    | x <= y    = y
    | otherwise = tak (tak (x-1) y z)
                      (tak (y-1) z x)
                      (tak (z-1) x y)

-- Eficiencia
--    λ> :set +s
--    λ> tak 16 6 1
--    16
--    (0.01 secs, 154,992 bytes)
--    
--    λ> tak 900 6 1
--    900
--    (0.03 secs, 3,011,208 bytes)
                  
