Advertisement
Guest User

Untitled

a guest
Mar 19th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 4.14 KB | None | 0 0
  1. ;; Christian Bouwense
  2.  
  3. #lang racket
  4. (require eopl/eopl)
  5.  
  6.  
  7. ;;;;;;;;;;;;;;;;
  8. ;; Exercise 1 ;;
  9. ;;;;;;;;;;;;;;;;
  10.  
  11.  
  12. ;; 1.
  13. ;;
  14. ;; Terminals: n
  15. ;; Nonterminals: <Number>, <E>
  16.  
  17. ;; 2.
  18. ;;
  19. ;; <Number> -> n
  20. ;; <E> -> <Number>
  21. ;; <E> -> <E> + <E>
  22. ;; <E> -> <E> - <E>
  23. ;; <E> -> (<E>)
  24.  
  25. ;; 3.
  26. ;;
  27. ;; <E> -> <E> + <E>
  28. ;; <E> + <E> -> <E> + (<E>)
  29. ;; <E> + (<E>) -> <E> + (<E> - <E>)
  30. ;; <E> + (<E> - <E>) -> <Number> + (<Number> - <Number>)
  31. ;; <Number> + (<Number> - <Number>) -> 1 + (4 - 7)
  32.  
  33. ;; 4.
  34. ;;
  35. ;; 1
  36. ;; 1 + 1
  37. ;; (1 + 1)
  38.  
  39.  
  40. ;;;;;;;;;;;;;;;;
  41. ;; Exercise 2 ;;
  42. ;;;;;;;;;;;;;;;;
  43.  
  44.  
  45. ;; <SimpleBTree> -> {*<SimpleBTree><SimpleBTree>*}
  46. ;; {*<SimpleBTree><SimpleBTree>*} -> {*<SimpleBTree>{*<SimpleBTree><SimpleBTree>*}*}
  47. ;; {*<SimpleBTree>{*<SimpleBTree><SimpleBTree>*}*} -> {*2{*3 4*}*}
  48.  
  49.  
  50. ;;;;;;;;;;;;;;;;
  51. ;; Exercise 3 ;;
  52. ;;;;;;;;;;;;;;;;
  53.  
  54.  
  55. ;; Literally how
  56. ;(define-datatype ex1 ex1?
  57. ;  (Number (num number?))
  58. ;  (E (e E?)))
  59.  
  60.  
  61. ;;;;;;;;;;;;;;;;
  62. ;; Exercise 4 ;;
  63. ;;;;;;;;;;;;;;;;
  64.  
  65.  
  66. (define-datatype Coordinate Coordinate?
  67.   (coord (x number?) (y number?)))
  68.  
  69. ;; coord -> num
  70. (define (getX c)
  71.   (cases Coordinate c
  72.     (coord (x y) x)))
  73.  
  74. ;; Coordinate -> num
  75. (define (getY c)
  76.   (cases Coordinate c
  77.     (coord (x y) y)))
  78.  
  79. ;; {Coordinate, Coordinate} -> num
  80. (define (distance c1 c2)
  81.   (sqrt (- (+ (expt (getX c1) 2) (expt (getX c2) 2))
  82.            (+ (expt (getY c1) 2) (expt (getY c2) 2)))))
  83.  
  84. (define-datatype Shape Shape?
  85.   (circle (radius number?))
  86.   (rectangle (width number?) (height number?)))
  87.  
  88. ;; Shape -> num
  89. (define (area s)
  90.   (cases Shape s
  91.     (circle (r) (* 3.14 (expt r 2)))
  92.     (rectangle (w h) (* w h))))
  93.  
  94. ;; Shape -> num
  95. (define (perimeter s)
  96.   (cases Shape s
  97.     (circle (r) (* 6.28 r))
  98.     (rectangle (w h) (+ (* 2 w) (* 2 h)))))
  99.  
  100. ;; I didn't do the rest of Exercise 4 because I got the point
  101.  
  102.  
  103. ;;;;;;;;;;;;;;;;
  104. ;; Exercise 5 ;;
  105. ;;;;;;;;;;;;;;;;
  106.  
  107.  
  108. (define-datatype SimpleBTree SimpleBTree?
  109.   (leaf-t
  110.     (data number?))
  111.   (node-t
  112.     (left SimpleBTree?)
  113.     (right SimpleBTree?)))
  114.  
  115. ;; 1.
  116. ;;
  117. ;; (node-t (leaf-t 2) (node-t (leaf-t 3) (leaf-t 4)))
  118.  
  119. ;; SimpleBTree? -> bool
  120. (define (isNode t)
  121.   (cases SimpleBTree t
  122.     (node-t (l r) #t)
  123.     (leaf-t (d) #f)))
  124.  
  125. ;; SimpleBTree? -> bool
  126. (define (isLeaf t)
  127.   (cases SimpleBTree t
  128.     (node-t (l r) #f)
  129.     (leaf-t (d) #t)))
  130.  
  131. ;; I don't want to do the rest of this
  132. ;; It's just time consuming
  133.  
  134.  
  135. ;;;;;;;;;;;;;;;;
  136. ;; Exercise 6 ;;
  137. ;;;;;;;;;;;;;;;;
  138.  
  139.  
  140. (define-datatype BTree BTree?
  141.   (leaf-t2 (data number?))
  142.   (node-t2 (data number?)
  143.           (left BTree?)
  144.           (right BTree?)))
  145.  
  146. ;; An example of a BTree
  147. (define ex
  148.   (node-t2 2
  149.           (node-t2 12 (leaf-t2 7) (leaf-t2 11))
  150.           (node-t2 4 (leaf-t2 1) (leaf-t2 9))))
  151.  
  152. ;; 1.
  153. ;;
  154. ;; BTrees have data in their nodes while SimpleBTrees do not.
  155.  
  156. ;; 2.
  157. ;;
  158. ;; No.
  159.  
  160. ;; 3.
  161. ;;
  162. ;; You will get an error, because car is expecting a type pair
  163. ;; and ex is of type BTree.
  164.  
  165. ;; 4.
  166. ;;
  167. ;; (list? ex) will return false.
  168.  
  169. ;; 5.
  170. ;;
  171. ;; (BTree? ex) will return true.
  172.  
  173. ;; 6.
  174. ;;
  175. ;; ex is of type BTree.
  176.  
  177.  
  178. ;;;;;;;;;;;;;;;;
  179. ;; Exercise 7 ;;
  180. ;;;;;;;;;;;;;;;;
  181.  
  182.  
  183. ;; Inorder: left -> root -> right
  184. (define (inorder t)
  185.   (cases BTree t
  186.     [node-t2 (d l r)
  187.              (append (inorder l) (cons d (inorder r)))]
  188.     [leaf-t2 (d)
  189.              (list d)]))
  190.  
  191. ;; Preorder: root -> left -> right
  192. (define (preorder t)
  193.   (cases BTree t
  194.     [node-t2 (d l r)
  195.               (cons d (append (preorder l) (preorder r)))]
  196.     [leaf-t2 (d)
  197.               (list d)]))
  198.  
  199. ;; Postorder: left -> right -> root
  200. (define (postorder t)
  201.   (cases BTree t
  202.     [node-t2 (d l r)
  203.               (append (append (postorder l) (postorder r)) (list d))]
  204.     [leaf-t2 (d)
  205.               (list d)]))
  206.  
  207.  
  208. ;; The rest of the exercises seem like a waste of time.
  209.  
  210.  
  211. ;;;;;;;;;;;;;
  212. ;; Helpers ;;
  213. ;;;;;;;;;;;;;
  214.  
  215.  
  216. (define sbt1 (leaf-t 1))
  217. (define sbt2 (node-t (leaf-t 1) (leaf-t 2)))
  218.  
  219. (define bt1 (node-t2 6
  220.                (node-t2 2 (leaf-t2 1)
  221.                           (node-t2 4 (leaf-t2 3)
  222.                                      (leaf-t2 5)))
  223.                (node-t2 7 (leaf-t2 8) (leaf-t2 9))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement