Fix not
[timetravel.git] / Programs.hs
1 module Programs where
2
3 import AST
4
5 -- | Infinitely increments and prints x (can't be written to a file sadly)
6 increment :: Statement
7 increment = Seq (Assign "x" (Const (I 0))) loop
8   where loop = Seq (Print (Var "x"))
9                    (Seq (Assign "x" (Add (Var "x") (Const (I 1))))
10                         loop)
11
12 -- | Catches a type error and prints 0
13 tryCatch :: Statement
14 tryCatch = Try (Print (Add (Const (I 3)) (Const (B True))))
15               (Print (Const (I 0)))
16
17 -- | Calculates nth fibonacci (5 by default) and stores result in 'x'
18 fibonacci :: Statement
19 fibonacci = Seq (Assign "n" (Const (I 5)))
20                 (Seq (Assign "x" (Const (I 1)))
21                      (Seq (Assign "y" (Const (I 0)))
22                           (While (Gt (Var "n") (Const (I 0)))
23                                  (Seq (Assign "tmp" (Var "x"))
24                                       (Seq (Assign "x" (Add (Var "x") (Var "y")))
25                                             (Seq (Assign "y" (Var "x"))
26                                                  (Assign "n" (Sub (Var "n") (Const (I 1))))))))))
27
28 boolNot :: Statement
29 boolNot = Print (Not (Const (B False)))