Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.81 KB | None | 0 0
  1. module rec Expr : sig
  2.   type expr =
  3.     | Num of int
  4.     | Add of expr * expr
  5.     | Mul of expr * expr
  6.     | Seq of Stmt.stmt * expr
  7.   val eval : expr -> int
  8. end = struct
  9.   type expr =
  10.     | Num of int
  11.     | Add of expr * expr
  12.     | Mul of expr * expr
  13.     | Seq of Stmt.stmt * expr
  14.   let rec eval = function
  15.     | Num k -> k
  16.     | Add (e, f) -> eval e + eval f
  17.     | Mul (e, f) -> eval e * eval f
  18.     | Seq (s, e) ->
  19.         Stmt.run s ;
  20.         eval e
  21. end
  22.  
  23. and Stmt : sig
  24.   type stmt =
  25.     | Print of string
  26.     | Compute of Expr.expr
  27.     | Exit
  28.   val run : stmt -> unit
  29. end = struct
  30.   type stmt =
  31.     | Print of string
  32.     | Compute of Expr.expr
  33.     | Exit
  34.   let run = function
  35.     | Print msg -> print_endline msg
  36.     | Compute e -> Printf.printf "%d\n" (Expr.eval e)
  37.     | Exit -> exit 0
  38. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement