Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- combine :: (Expr, Value) -> (Expr, Value) -> [(Expr, Value)]
- combine (e1, v1) (e2,v2)
- | v1 < v2 = comb1 (e1,v1) (e2,v2)
- | v1 == v2 = comb2 (e1,v1) (e2,v2)
- | v1 > v2 = comb1 (e2,v2) (e1,v1)
- comb1 (e1, v1) (e2, v2)
- = [(App Add e1 e2, v1 + v2), (App Sub e2 e1, v2 - v2)] ++
- if 1 < v1
- then [(App Mul e1 e2, v1 * v2)] ++ [(App Div e2 e1, q) | r == 0]
- else []
- where (q, r) = divMod v2 v1
- comb2 (e1, v1) (e2, v2)
- = [(App Add e1 e2, v1 + v2)] ++
- if 1 < v1
- then [(App Mul e1 e2, v1 * v2), (App Div e1 e2, 1)]
- else []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement