Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. combine :: (Expr, Value) -> (Expr, Value) -> [(Expr, Value)]
  2. combine (e1, v1) (e2,v2)
  3.  | v1 < v2  = comb1 (e1,v1) (e2,v2)
  4.  | v1 == v2 = comb2 (e1,v1) (e2,v2)
  5.  | v1 > v2  = comb1 (e2,v2) (e1,v1)
  6.  
  7. comb1 (e1, v1) (e2, v2)
  8.  = [(App Add e1 e2, v1 + v2), (App Sub e2 e1, v2 - v2)] ++
  9.    if 1 < v1
  10.    then [(App Mul e1 e2, v1 * v2)] ++ [(App Div e2 e1, q) | r == 0]
  11.    else []
  12.        where (q, r) = divMod v2 v1
  13.  
  14. comb2 (e1, v1) (e2, v2)
  15.  = [(App Add e1 e2, v1 + v2)] ++
  16.    if 1 < v1
  17.    then [(App Mul e1 e2, v1 * v2), (App Div e1 e2, 1)]
  18.    else []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement