(* * * * * * * * * * * * Resource Aware ML * * * * * * * * * * * * * * * * Use Cases * * * * File: * examples/LogicAndCodes.raml * * Author: * Ankush Das (2015) * * Description: * The third section (“Logic and Codes“) from the OCaml tutorial * "99 Problems (solved) in OCaml": * https://ocaml.org/learn/tutorials/99problems.html * *) type bool_expr = | Var of int | Not of bool_expr | And of bool_expr * bool_expr | Or of bool_expr * bool_expr;; exception Invalid let rec eval2 a val_a b val_b = function | Var x -> (Raml.tick(1.0); if x = a then val_a else if x = b then val_b else raise Invalid) | Not e -> (Raml.tick(1.0); not(eval2 a val_a b val_b e)) | And(e1, e2) -> (Raml.tick(1.0); eval2 a val_a b val_b e1 && eval2 a val_a b val_b e2) | Or(e1, e2) -> (Raml.tick(1.0); eval2 a val_a b val_b e1 || eval2 a val_a b val_b e2);; exception Not_found let table2 a b expr = [(true, true, eval2 a true b true expr); (true, false, eval2 a true b false expr); (false, true, eval2 a false b true expr); (false, false, eval2 a false b false expr) ];; ()