Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. (define (safe-eval ex)
  2. (cond
  3. [(number? ex) ex]
  4. [(string? ex) ex]
  5. [(bae? ex)
  6. (cond
  7. [(or(string? (bae-arg1 ex))(string? (bae-arg2 ex))) "divide by zero"]
  8. [else
  9. (cond
  10. [(symbol=? (bae-fn ex) '*)
  11. (cond [(or(string? (safe-eval (bae-arg1 ex)))(string?(safe-eval(bae-arg2 ex)))) "divide by zero"]
  12. [else (*(safe-eval (bae-arg1 ex))(safe-eval(bae-arg2 ex)))])]
  13.  
  14. [(symbol=? (bae-fn ex) '+)
  15. (cond [(or(string? (safe-eval (bae-arg1 ex)))(string?(safe-eval(bae-arg2 ex)))) "divide by zero"]
  16. [else (+(safe-eval (bae-arg1 ex))(safe-eval(bae-arg2 ex)))])]
  17.  
  18. [(symbol=? (bae-fn ex) '/)
  19. (cond [(equal? (safe-eval(bae-arg2 ex)) 0) "divide by zero"]
  20. [(or(string? (bae-arg1 ex))(string? (bae-arg2 ex))) "divide by zero"]
  21. [else (/(safe-eval (bae-arg1 ex))(safe-eval(bae-arg2 ex)))])]
  22.  
  23. [(symbol=? (bae-fn ex) '-)
  24. (cond [(or(string? (safe-eval (bae-arg1 ex)))(string?(safe-eval(bae-arg2 ex)))) "divide by zero"]
  25. [else (-(safe-eval (bae-arg1 ex))(safe-eval(bae-arg2 ex)))])])])]))
  26.  
  27. (check-expect (safe-eval (make-bae '* 2 6))12)
  28. (check-expect (safe-eval (make-bae '/ 2 0))"divide by zero")
  29. (check-expect (safe-eval (make-bae '+ 2 (make-bae '/ 5 0)))"divide by zero")
  30. (check-expect (safe-eval (make-bae '/ (make-bae '/ (make-bae '* 5 0)(make-bae '* 5 2))(make-bae '- 5 2)))0)
  31. (check-expect (safe-eval (make-bae '/ 1 (make-bae '- 5 5)))"divide by zero")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement