Compare commits
3 Commits
9551624d6a
...
d8d1d840bb
Author | SHA1 | Date | |
---|---|---|---|
d8d1d840bb | |||
aa3f4758e5 | |||
1820d98dfb |
@ -1,5 +1,7 @@
|
|||||||
#lang plait
|
#lang plait
|
||||||
|
|
||||||
|
(define minutes-spent 60)
|
||||||
|
|
||||||
#| BNF for the AE language:
|
#| BNF for the AE language:
|
||||||
ae: NUMBER
|
ae: NUMBER
|
||||||
| { ae + ae }
|
| { ae + ae }
|
||||||
@ -40,7 +42,12 @@
|
|||||||
[(Add l r) (+ (eval l) (eval r))]
|
[(Add l r) (+ (eval l) (eval r))]
|
||||||
[(Sub l r) (- (eval l) (eval r))]
|
[(Sub l r) (- (eval l) (eval r))]
|
||||||
[(Mul l r) (* (eval l) (eval r))]
|
[(Mul l r) (* (eval l) (eval r))]
|
||||||
[(Div l r) (/ (eval l) (eval r))]))
|
[(Div l r) (if (equal? 0 (eval r))
|
||||||
|
(cond
|
||||||
|
[(< 0 (eval l)) +inf.0]
|
||||||
|
[(> 0 (eval l)) -inf.0]
|
||||||
|
[else +nan.0])
|
||||||
|
(/ (eval l) (eval r)))]))
|
||||||
|
|
||||||
;; evaluate an AE program contained in an s-expr
|
;; evaluate an AE program contained in an s-expr
|
||||||
(define (run sx)
|
(define (run sx)
|
||||||
@ -53,4 +60,6 @@
|
|||||||
(test (run `{8 / 2}) 4)
|
(test (run `{8 / 2}) 4)
|
||||||
(test (run `{-8 / 0}) -inf.0)
|
(test (run `{-8 / 0}) -inf.0)
|
||||||
(test (run `{8 / {5 - 5}}) +inf.0)
|
(test (run `{8 / {5 - 5}}) +inf.0)
|
||||||
(test (run `{1 / {1 / 0}}) 0.0)
|
(test (run `{1 / {1 / 0}}) 0.0)
|
||||||
|
(test (run `{0 / 0}) +nan.0) ; Special 0/0 case
|
||||||
|
(test/exn (run `{+ 1 1}) "parse") ; Parse error
|
Reference in New Issue
Block a user