Guest User

Untitled

a guest
Apr 24th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.37 KB | None | 0 0
  1. ;-------------------------------------------------------------
  2. ; Edgar Olijar & Robin Bertram
  3. ; Tutor: Jonas Blumenstein
  4. ; Übungsgruppe: Mittwoch 17-19 Uhr, C9G09
  5. ;-------------------------------------------------------------
  6.  
  7. ; sorted? gibt an, ob eine liste von natürlichen Zahlen aufsteigend sortiert ist
  8. ; dabei dürfen auch gleiche Zahlen direkt hintereinander stehen.
  9. (: sorted? ((list-of real) -> boolean))
  10. (check-expect (sorted? (make-pair -5 (make-pair 5 (make-pair 120 empty)))) #t)
  11. (check-expect (sorted? (make-pair 2 (make-pair 1 (make-pair 120 empty)))) #f)
  12. (check-expect (sorted? (make-pair 1 (make-pair 1 (make-pair 120 empty)))) #t)
  13. (define sorted?
  14.   (lambda (lis)
  15.     (cond ((or (empty? lis) (empty? (rest lis)))
  16.            #t)
  17.           ((pair? (rest lis))
  18.            (if (> (first lis) (first (rest lis)))
  19.                #f
  20.                (sorted? (rest lis)))))))
  21.  
  22. ;definiere eine Signatur für aufsteigend sortierte Listen von Zahlen
  23. (define sorted (signature (predicate sorted?)))
  24.  
  25. ; Die Prozedur insert-sorted konsumiert eine Zahl und eine sortierte Liste
  26. ; von Zahlen und fügt diese Zahl an der richtigen Stelle in die Liste ein
  27. ; (so dass die Liste wieder sortiert ist)
  28. (: insert-sorted (real sorted -> sorted))
  29. (check-expect (insert-sorted 23 (make-pair 3 (make-pair 12 (make-pair 45 (make-pair 113 empty)))))
  30.               (make-pair 3 (make-pair 12 (make-pair 23 (make-pair 45 (make-pair 113 empty))))))
  31. (check-within (insert-sorted 4.3 empty) (make-pair 4.3 empty) 0.001)
  32. (check-within (insert-sorted -2.78 (make-pair -2.78 empty))
  33.               (make-pair -2.78 (make-pair -2.78 empty)) 0.0000001)
  34. (define insert-sorted
  35.   (lambda (x lis)
  36.     (cond ((empty? lis) (make-pair x empty))
  37.           ((pair? lis)
  38.            (if (> x (first lis))
  39.                (make-pair (first lis) (insert-sorted x (rest lis) ) )
  40.                (make-pair x lis))))))
  41.  
  42. ; Prozedur sort-list sortiert Zahlen in einer Liste lis
  43. (: sort-list ((list-of real) -> sorted))
  44. (check-within (sort-list (make-pair 5 (make-pair 99 (make-pair -5 empty))))
  45.               (make-pair -5 (make-pair 5 (make-pair 99 empty))) 0.0001)
  46. (check-expect (sort-list (make-pair 4 empty))
  47.               (make-pair 4 empty))
  48. (check-expect (sort-list empty) empty)
  49. (define sort-list
  50.   (lambda (lis)
  51.     (if (sorted? lis)
  52.         lis
  53.         (insert-sorted (first lis) (sort-list (rest lis))))))
Add Comment
Please, Sign In to add comment