fork download
  1. data Tree a = Val a | Tarai (Tree a) (Tree a) (Tree a) deriving Show
  2.  
  3. tri a b c = Tarai (Val a) (Val b) (Val c)
  4.  
  5. tri_next (Val a) = Val a
  6. tri_next (Tarai (Val a) (Val b) (Val c)) | a <= b = (Val b)
  7. tri_next (Tarai (Val a) (Val b) (Val c)) = Tarai (tri (a-1) b c) (tri (b-1) c a) (tri (c-1) a b)
  8. tri_next (Tarai (Val a) (Val b) c) = Tarai (Val a) (Val b) (tri_next c)
  9. tri_next (Tarai (Val a) b c) = Tarai (Val a) (tri_next b) c
  10. tri_next (Tarai a b c) = Tarai (tri_next a) b c
  11.  
  12. tri_loop (Val a) = do
  13. print (Val a)
  14.  
  15. tri_loop (Tarai a b c) = do
  16. print (Tarai a b c)
  17. tri_loop (tri_next (Tarai a b c))
  18.  
  19. main = do
  20. tri_loop (tri 2 1 0)
  21.  
  22.  
Success #stdin #stdout 0s 4656KB
stdin
Standard input is empty
stdout
Tarai (Val 2) (Val 1) (Val 0)
Tarai (Tarai (Val 1) (Val 1) (Val 0)) (Tarai (Val 0) (Val 0) (Val 2)) (Tarai (Val (-1)) (Val 2) (Val 1))
Tarai (Val 1) (Tarai (Val 0) (Val 0) (Val 2)) (Tarai (Val (-1)) (Val 2) (Val 1))
Tarai (Val 1) (Val 0) (Tarai (Val (-1)) (Val 2) (Val 1))
Tarai (Val 1) (Val 0) (Val 2)
Tarai (Tarai (Val 0) (Val 0) (Val 2)) (Tarai (Val (-1)) (Val 2) (Val 1)) (Tarai (Val 1) (Val 1) (Val 0))
Tarai (Val 0) (Tarai (Val (-1)) (Val 2) (Val 1)) (Tarai (Val 1) (Val 1) (Val 0))
Tarai (Val 0) (Val 2) (Tarai (Val 1) (Val 1) (Val 0))
Tarai (Val 0) (Val 2) (Val 1)
Val 2