Advertisement
Guest User

Untitled

a guest
Dec 8th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 0.51 KB | None | 0 0
  1. let rec eval (e:Expr) (env:Map<string, int>) : int =
  2.   match e with
  3.   | Const(a) -> a
  4.   | Ident(id) -> env |> Map.find(id)
  5.   | Neg(a) -> (env |> eval a)
  6.   | Sum(a, b) -> (env |> eval a) + (env |> eval b)
  7.   | Diff(a, b) -> (env |> eval a) - (env |> eval b)
  8.   | Prod(a, b) -> (env |> eval a) * (env |> eval b)
  9.   | Div(a, b) -> (env |> eval a) / (env |> eval b)
  10.   | DivRem(a, b) -> (env |> eval a) % (env |> eval b)
  11.   | Let(id, a, b) ->
  12.       let nmap = Map.add id (env |> eval a) env
  13.       (nmap |> eval b)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement