Advertisement
Guest User

Untitled

a guest
Mar 21st, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.87 KB | None | 0 0
  1. let rec evalLogicExpr expr =
  2.     match expr with
  3.     | Prim ("=", oper1, oper2)   ->  (evalLogicExpr oper1) =  (evalLogicExpr oper2)
  4.     | Prim ("<>", oper1, oper2)  ->  (evalLogicExpr oper1) <> (evalLogicExpr oper2)
  5.     | Prim (">", oper1, oper2)   ->  (evalLogicExpr oper1) >  (evalLogicExpr oper2)
  6.     | Prim ("<", oper1, oper2)   ->  (evalLogicExpr oper1) <  (evalLogicExpr oper2)
  7.     | Prim (">=", oper1, oper2)  ->  (evalLogicExpr oper1) >= (evalLogicExpr oper2)
  8.     | Prim ("<=", oper1, oper2)  ->  (evalLogicExpr oper1) <= (evalLogicExpr oper2)
  9.     | _                          ->  failwithf "Syntax error"
  10.  
  11. let rec evalNumExpr expr =
  12.     match expr with
  13.     | Prim ("-", oper1, oper2)   ->  (evalNumExpr oper1) -  (evalNumExpr oper2)
  14.     | Prim ("+", oper1, oper2)   ->  (evalNumExpr oper1) +  (evalNumExpr oper2)
  15.     | Prim ("*", oper1, oper2)   ->  (evalNumExpr oper1) *  (evalNumExpr oper2)
  16.     | Prim ("/", oper1, oper2)   ->  (evalNumExpr oper1) /  (evalNumExpr oper2)
  17.     | Prim ("%", oper1, oper2)   ->  (evalNumExpr oper1) %  (evalNumExpr oper2)
  18.     | _                          -> failwithf "Error in syntax"
  19.  
  20. let evalPrim expr =
  21.     match expr with
  22.     | Prim ("-", _, _)   ->  evalNumExpr expr
  23.     | Prim ("+", _, _)   ->  evalNumExpr expr
  24.     | Prim ("*", _, _)   ->  evalNumExpr expr
  25.     | Prim ("/", _, _)   ->  evalNumExpr expr
  26.     | Prim ("%", _, _)   ->  evalNumExpr expr
  27.     | Prim ("=", _, _)   ->  evalLogicExpr expr
  28.     | Prim ("<>", _, _)  ->  evalLogicExpr expr
  29.     | Prim (">", _, _)   ->  evalLogicExpr expr
  30.     | Prim ("<", _, _)   ->  evalLogicExpr expr
  31.     | Prim (">=", _, _)  ->  evalLogicExpr expr
  32.     | Prim ("<=", _, _)  ->  evalLogicExpr expr
  33.     | _     ->  failwithf "%A" "Incorrect syntax"
  34.  
  35. let rec eval (expr : expr) =
  36.     match expr with
  37.     | Prim (_, _, _)    -> evalPrim expr
  38.     | _                 -> failwithf "Syntax error"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement