Advertisement
Guest User

Untitled

a guest
Nov 1st, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. datatype expression = Add     of expression * expression
  2.     |                 Sub     of expression * expression
  3.     |                 Mul     of expression * expression
  4.     |                 Div     of expression * expression
  5.     |                 Greater of expression * expression
  6.     |                 Lesser  of expression * expression
  7.     |                 Equal   of expression * expression
  8.     |                 Var     of string
  9.     |                 Num     of int
  10.  
  11. datatype direction = WEST
  12.     |                EAST
  13.     |                NORTH
  14.     |                SOUTH
  15.  
  16. datatype statement = Move       of direction * expression
  17.     |                Vardec     of string * expression
  18.     |                Loop       of statement list
  19.     |                Break      of expression
  20.     |                Assignment of string * bool
  21.     |                STOP
  22.  
  23. type programState =  {
  24.     grid:           int * int,
  25.     robotPosition:  int * int,
  26.     vars:           (string * int) list
  27.    
  28. }
  29.  
  30. val prog1 = [
  31.     Move (WEST,  Num (15)),
  32.     Move (SOUTH, Num (15)),
  33.     Move (EAST,  Add (Num (2), Num (3))),
  34.     Move (NORTH, Add (Num (10), Num (27))),
  35.     STOP
  36. ]
  37.  
  38. val state1 = {grid = (64, 64), robotPosition = (23, 30), vars = []}
  39.  
  40. fun    move (x, y) WEST  distance bounds  = (x - distance, y)
  41.     |  move (x, y) NORTH distance bounds  = (x, y + distance)
  42.     |  move (x, y) EAST  distance bounds  = (x + distance, y)
  43.     |  move (x, y) SOUTH distance bounds  = (x, y - distance)
  44.  
  45. fun   evalExpr (Num (num)) programState = num
  46.     | evalExpr (Add (left, right)) programState = (evalExpr(left) programState) + (evalExpr(right) programState)
  47.  
  48. fun   evalStatement (Move (dir, exp)) (state: programState) =
  49.     {
  50.         grid = #grid state,
  51.         robotPosition = move (#robotPosition state) dir (evalExpr exp state) (#grid state),
  52.         vars = #vars state
  53.     }
  54.  
  55. fun   interpret nil (state: programState) = evalStatement x state
  56.     | interpret (x::xs)  (state: programState) = interpret xs (evalStatement x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement