Advertisement
Guest User

EB2-EX3 Bonelli

a guest
Mar 19th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.79 KB | None | 0 0
  1. #lang racket
  2. (require eopl/eopl)
  3.  
  4. (define NaturalNumber? (lambda (x) (and (integer? x) (>= x 0))))
  5.  
  6. (define-datatype Number Number?
  7.   (n (x NaturalNumber?))
  8.   )
  9.  
  10. (define-datatype E E?
  11.   (Num (datum Number?))
  12.   (+Node (left E?) (right E?))
  13.   (-Node (left E?) (right E?))
  14.   (parenNode (contents E?))
  15.   )
  16.  
  17. (define (Number->string num)
  18.   (cases Number num
  19.     (n (x) (number->string x))))
  20.  
  21. (define (E-string e)
  22.   (cases E e
  23.     (+Node (left right) (string-append (E-string left) " + " (E-string right)))
  24.     (-Node (left right) (string-append (E-string left) " - " (E-string right)))
  25.     (parenNode (contents) (string-append "(" (E-string contents) ")"))
  26.     (Num (n) (Number->string n))))
  27.  
  28. ;1 + (4 - 7)
  29. (E-string (+Node (Num (n 1)) (parenNode (-Node (Num (n 4)) (Num (n 7))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement