Compare commits
3 Commits
9551624d6a
...
d8d1d840bb
Author | SHA1 | Date | |
---|---|---|---|
d8d1d840bb | |||
aa3f4758e5 | |||
1820d98dfb |
@ -1,5 +1,7 @@
|
||||
#lang plait
|
||||
|
||||
(define minutes-spent 60)
|
||||
|
||||
#| BNF for the AE language:
|
||||
ae: NUMBER
|
||||
| { ae + ae }
|
||||
@ -40,7 +42,12 @@
|
||||
[(Add l r) (+ (eval l) (eval r))]
|
||||
[(Sub 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
|
||||
(define (run sx)
|
||||
@ -54,3 +61,5 @@
|
||||
(test (run `{-8 / 0}) -inf.0)
|
||||
(test (run `{8 / {5 - 5}}) +inf.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