• Source
    1. ;Gray Pickney
    2. ;CS365
    3. ;Homework 10
    4.  
    5. ;#1 (DONE)
    6. (define swap (lambda (a b)
    7. (if(< a b)
    8. (cons a b)
    9. (cons b a))))
    10.  
    11. ;#2 (DONE)
    12. ;sum of list
    13. (define sumList (lambda (L)
    14. (cond
    15. ((null? L) 0)
    16. (#t (+ (car L) (sumList (cdr L)))))))
    17.  
    18. ;size from L
    19. (define count (lambda (L)
    20. (cond
    21. ((null? L) 0)
    22. (#t (+ 1 (count (cdr L)))))))
    23.  
    24. ;average from sum and count
    25. (define avg (lambda (L)
    26. (/ (sumList L) (count L))))
    27.  
    28. ;#3 (DONE)
    29. (define min (lambda (L)
    30. (letrec ((minHelper(lambda (L minThusFar)
    31. (cond
    32. ((null? L) minThusFar)
    33. (#t (minHelper (cdr L)
    34. (if (< (car L) minThusFar) (car L) minThusFar)))))))
    35.  
    36. (cond
    37. ((null? L) '())
    38. (else (minHelper L (car L)))))))
    39.  
    40. ;#4 (DONE)
    41. (define merge (lambda (L1 L2)
    42. (cond
    43. ((null? L1) L2)
    44. ((null? L2) L1)
    45. ((< (car L1) (car L2)) (cons (car L1) (merge (cdr L1) L2)))
    46. (else (cons (car L2) (merge L1 (cdr L2)))))))
    47.  
    48. ;mergesortHelper
    49. (define mergesortHelper (lambda (L L1 L2 whichlist?)
    50. (cond
    51. ((null? L) (merge (mergesort L1) (mergesort L2)))
    52. ((eq? whichlist? 1) (mergesortHelper (cdr L) (cons (car L) L1) L2 (+ whichlist? 1)))
    53. ((eq? whichlist? 2) (mergesortHelper (cdr L) L1 (cons (car L) L2) (- whichlist? 1))))))
    54.  
    55. ;mergesort
    56. (define mergesort(lambda (L)
    57. (cond
    58. ((null? L) '())
    59. ((null? (cdr L)) L)
    60. (else (mergesortHelper L '() '() 1)))))
    61.  
    62. ;#5 (DONE)
    63. ;Write a function to return a list containing all elements of a given list
    64. ;that satisfy a given predicate. For example
    65. ;(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7)) should return (3 2 4)
    66.  
    67. (define filter (lambda (pred L)
    68. (cond
    69. ((null? L) '())
    70. ((pred (car L)) (cons (car L) (filter pred (cdr L))))
    71. (#t (filter pred (cdr L))))))
    72.  
    73. (display (swap 9 6))
    74. (newline)
    75. (display (sumList '(7 6 9 2)))
    76. (newline)
    77. (display (min '(9 2 1 0)))
    78. (newline)
    79. (display (mergesort '(3 8 5 9 0 2 6)))
    80. (newline)