2024-10-04 19:38:34 +02:00
|
|
|
(*
|
|
|
|
|
|
|
|
|
|
open Lang.Exercises
|
|
|
|
|
(* let () = Printf.printf "%d\n" (eval_a_exp (Of_bool (Bval true))); *)
|
|
|
|
|
|
|
|
|
|
let myfsa: fsa = {vertices = (StringMap.add "node 2" true (StringMap.singleton "node 1" false));
|
|
|
|
|
edges = (StringMap.add "node 2" ("node 2", 'b') (StringMap.singleton "node 1" ("node 2", 'a')));
|
|
|
|
|
state = "node 1"}
|
|
|
|
|
|
|
|
|
|
let mystr = ['a'; 'b'; 'a'; 'b']
|
|
|
|
|
|
|
|
|
|
let ret = (Lang.Exercises.ex8 mystr myfsa);;
|
|
|
|
|
if ret
|
|
|
|
|
then print_endline "true"
|
|
|
|
|
else print_endline "false"
|
|
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
open Lang.MiniImp
|
|
|
|
|
|
2024-10-05 18:40:45 +02:00
|
|
|
(* -------------------------------------------------------------------------- *)
|
|
|
|
|
(* Identity program *)
|
|
|
|
|
let program =
|
2024-10-04 19:38:34 +02:00
|
|
|
Main
|
|
|
|
|
("a",
|
|
|
|
|
"b",
|
2024-10-05 18:40:45 +02:00
|
|
|
(Assignment ("b", (Variable "a")))
|
|
|
|
|
)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
Printf.printf "%d\n" (reduce 100 program)
|
|
|
|
|
|
|
|
|
|
(* -------------------------------------------------------------------------- *)
|
|
|
|
|
(* y not defined program *)
|
|
|
|
|
let program =
|
|
|
|
|
Main
|
|
|
|
|
("a",
|
|
|
|
|
"b",
|
|
|
|
|
(Sequence (
|
|
|
|
|
(Assignment ("x", (Integer 1))),
|
|
|
|
|
(Assignment ("b",
|
|
|
|
|
(Plus ((Plus (Variable "a", Variable "x")), (Variable "y")))))
|
|
|
|
|
)
|
2024-10-04 19:38:34 +02:00
|
|
|
)
|
|
|
|
|
)
|
2024-10-05 18:40:45 +02:00
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
Printf.printf "%d\n" (reduce 100 program)
|
|
|
|
|
with AbsentAssignment s ->
|
|
|
|
|
Printf.printf "%s\n" s
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
(* -------------------------------------------------------------------------- *)
|
|
|
|
|
(* factorial program *)
|
|
|
|
|
let program =
|
|
|
|
|
Main
|
|
|
|
|
("a",
|
|
|
|
|
"b",
|
|
|
|
|
(Sequence (
|
|
|
|
|
(Assignment ("b", (Integer 1))),
|
|
|
|
|
(For (
|
|
|
|
|
(Assignment ("i", (Integer 1))),
|
|
|
|
|
(BCmpLessEq (Variable "i", Variable "a")),
|
|
|
|
|
(Assignment ("i", (Plus ((Variable "i"), (Integer 1))))),
|
|
|
|
|
(Assignment ("b", (Times (Variable "b", Variable "i"))))
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
Printf.printf "%d\n" (reduce 10 program)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
(* -------------------------------------------------------------------------- *)
|
|
|
|
|
(* hailstone sequence lenght program *)
|
|
|
|
|
let program =
|
|
|
|
|
Main
|
|
|
|
|
("a",
|
|
|
|
|
"b",
|
|
|
|
|
(Sequence (
|
|
|
|
|
(Assignment ("b", (Integer 1))),
|
|
|
|
|
(While (
|
|
|
|
|
(BNot (BCmp ((Variable "a"), (Integer 1)))),
|
|
|
|
|
(Sequence (
|
|
|
|
|
(Assignment ("b", (Plus (Variable "b", Integer 1)))),
|
|
|
|
|
(If (
|
|
|
|
|
(BCmp (Modulo (Variable "a", Integer 2), Integer 1)),
|
|
|
|
|
(Assignment ("a", Plus (Times (Integer 3, Variable "a"), Integer 1))),
|
|
|
|
|
(Assignment ("a", Division (Variable "a", Integer 2)))
|
|
|
|
|
))
|
|
|
|
|
))
|
|
|
|
|
))
|
|
|
|
|
))
|
|
|
|
|
)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
Printf.printf "%d\n" (reduce 77031 program)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
(* -------------------------------------------------------------------------- *)
|
|
|
|
|
(* sum multiples of 3 and 5 program *)
|
|
|
|
|
let program =
|
|
|
|
|
Main
|
|
|
|
|
("a",
|
|
|
|
|
"b",
|
|
|
|
|
(Sequence (
|
|
|
|
|
(Assignment ("b", (Integer 0))),
|
|
|
|
|
(For (
|
|
|
|
|
(Assignment ("i", Integer 0)),
|
|
|
|
|
(BCmpLess (Variable "i", Variable "a")),
|
|
|
|
|
(Assignment ("i", Plus (Variable "i", Integer 1))),
|
|
|
|
|
(If (
|
|
|
|
|
(BOr ((BCmp (Modulo (Variable "i", Integer 3), Integer 0)),
|
|
|
|
|
(BCmp (Modulo (Variable "i", Integer 5), Integer 0)))),
|
|
|
|
|
(Assignment ("b", Plus (Variable "b", Variable "i"))),
|
|
|
|
|
(Skip)
|
|
|
|
|
))
|
|
|
|
|
))
|
|
|
|
|
))
|
|
|
|
|
)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
Printf.printf "%d\n" (reduce 12345 program)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
(* -------------------------------------------------------------------------- *)
|
|
|
|
|
(* rand program *)
|
|
|
|
|
let program =
|
|
|
|
|
Main
|
|
|
|
|
("a",
|
|
|
|
|
"b",
|
|
|
|
|
(Assignment ("b", Rand (Variable "a")))
|
|
|
|
|
)
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
Printf.printf "%d\n" (reduce 10 program)
|
|
|
|
|
;;
|