Advertisement
Olenji

Untitled

Apr 17th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. (define (stat-set)
  2. (let ((internal-set (list)))
  3. (let ((current-max 0))
  4. (let ((current-min 0))
  5. (let ((current-length 0))
  6. (let ((current-average 0))
  7. (define (empty)
  8. (empty? internal-set)
  9. )
  10. (define (insert n)
  11. (set! internal-set
  12. (append (list n) internal-set))
  13. (update)
  14. )
  15. (define (delete n)
  16. (set! internal-set (delete-helper n internal-set))
  17. (update)
  18. )
  19. (define (element? n)
  20. (define (element-helper n set)
  21. (cond ((null? set)
  22. #f)
  23. ((= n (car set))
  24. #t)
  25. (else
  26. (element-helper n (cdr set))))
  27. )
  28. (element-helper n internal-set)
  29. )
  30. (define (largest)
  31. current-max
  32. )
  33. (define (smallest)
  34. current-min
  35. )
  36. (define (size)
  37. current-length
  38. )
  39. (define (average)
  40. current-average
  41. )
  42. (define (update)
  43. (set-largest)
  44. (set-smallest)
  45. (set-length)
  46. (set-average)
  47. )
  48. (define (set-largest)
  49. (define (max-help list)
  50. (cond ((null? (cdr list))
  51. (car list))
  52. ((< (car list) (max-help (cdr list))) (max-help (cdr list)))
  53. (else (car list)))
  54. )
  55. (set! current-max (max-help internal-set))
  56. )
  57. (define (set-smallest)
  58. (define (min-help list)
  59. (cond ((null? (cdr list)) (car list))
  60. ((< (car list) (min-help (cdr list))) (car list))
  61. (else (min-help (cdr list))))
  62. )
  63. (set! current-min (min-help internal-set))
  64. )
  65. (define (set-length)
  66. (set! current-length (length internal-set))
  67. )
  68. (define (set-average)
  69. (define (sum list)
  70. (if (null? list)
  71. 0
  72. (+ (car list) (sum (cdr list))))
  73. )
  74. (set! current-average (/ (sum internal-set) current-length))
  75. )
  76. (lambda (method)
  77. (cond ((eq? method 'empty?) empty)
  78. ((eq? method 'insert) insert)
  79. ((eq? method 'delete) delete)
  80. ((eq? method 'element?) element?)
  81. ((eq? method 'largest) largest)
  82. ((eq? method 'smallest) smallest)
  83. ((eq? method 'size) size)
  84. ((eq? method 'average) average))))))))
  85. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement