Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (require eopl/eopl)
- (define NaturalNumber? (lambda (x) (and (integer? x) (>= x 0))))
- (define-datatype Number Number?
- (n (x NaturalNumber?))
- )
- (define-datatype E E?
- (Num (datum Number?))
- (+Node (left E?) (right E?))
- (-Node (left E?) (right E?))
- (parenNode (contents E?))
- )
- (define (Number->string num)
- (cases Number num
- (n (x) (number->string x))))
- (define (E-string e)
- (cases E e
- (+Node (left right) (string-append (E-string left) " + " (E-string right)))
- (-Node (left right) (string-append (E-string left) " - " (E-string right)))
- (parenNode (contents) (string-append "(" (E-string contents) ")"))
- (Num (n) (Number->string n))))
- ;1 + (4 - 7)
- (E-string (+Node (Num (n 1)) (parenNode (-Node (Num (n 4)) (Num (n 7))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement