Advertisement
Mihai_Preda

Untitled

Apr 23rd, 2021
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-
  2. Gasiti mai jos limbajul unui minicalculator si o interpretare partiala.
  3. Calculatorul are o celulă de memorie, care are valoarea initiala  0.
  4. Interpretarea instructiunilor este data mai jos.
  5.  
  6. Un program este o expresie de tip `Prog`iar rezultatul executiei este starea finala a memoriei.
  7. Testare se face apeland `prog test`.
  8. -}
  9.  
  10. data Prog  = On [Stmt]                
  11. data Stmt =
  12.      Save Expr     -- evalueaza expresia și salvează rezultatul in Mem
  13.    | NoSave Expr   -- evalueaza expresia, fără a modifica Mem
  14. data Expr =  Mem | V Int | Expr :+ Expr | If Expr Expr Expr
  15.  
  16. infixl 6 :+
  17.  
  18. type Env = Int   -- valoarea curentă a celulei de memorie
  19.  
  20. expr ::  Expr -> Env -> Int
  21. expr Mem m = m
  22. expr (V val) _ = val
  23. expr (exp1 :+ exp2) m = expr exp1 m + expr exp2 m
  24. expr (If e e1 e2) env
  25.     | expr e env == 0 = expr e1 env
  26.     | otherwise = expr e2 env
  27.  
  28. stmt :: Stmt -> Env -> Env
  29. stmt (NoSave e) env = expr e env
  30. stmt (Save e) env = expr e (expr e env)
  31.  
  32. stmts :: [Stmt] -> Env -> Env
  33. stmts (s:ss) env = stmt s (stmts ss env)
  34. stmts [] env = env
  35.  
  36. prog :: Prog -> Env
  37. prog (On ss) = stmts ss 0
  38.  
  39.  
  40. test1 :: Prog
  41. test1 = On [Save (V 3), NoSave (Mem :+ (V 5))]
  42. test2 :: Prog
  43. test2 = On [NoSave (V 3 :+ V 3)]
  44.  
  45. {-CERINTE
  46.  
  47. 1) (10pct) Finalizati definitia functiilor de interpretare.
  48. 2) (10 pct) Adaugati expresia `If e e1 e2` care se evaluează `e1` daca `e` are valoarea `0` si la `e2` in caz contrar.
  49. 3) (20pct)Definiti interpretarea  limbajului extins modificand functiile de interpretare astfel incat executia unui program
  50.  sa intoarca starea memoriei si  lista valorilor calculate.
  51. Rezolvați subiectul 3) în același fișier redenumind funcțiile de interpretare.    
  52.  
  53.  
  54. Indicati testele pe care le-ati folosit in verificarea solutiilor.
  55.  
  56. -}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement