All pastes #248892 Raw Edit

Stuff

public text v1 · immutable
#248892 ·published 2006-11-15 03:31 UTC
rendered paste body
;; Question 3

;; code from lectures
;; merge: (listof num) (listof num) -> (listof num)
;; merges list1 and list2 provided both are sorted in
;;  ascending order
(define (merge list1 list2)
  (cond
    [(and (empty? list1) (empty? list2)) empty]
    [(and (empty? list1) (cons? list2)) list2]
    [(and (cons? list1) (empty? list2)) list1]
    [(and (cons? list1) (cons? list2))
     (cond
       [(< (first list1) (first list2))
        (cons (first list1) (merge (rest list1) list2))]
       [ else
         (cons (first list2) (merge list1 (rest list2)))])]))

;; helper functions
(define (make-singles alon)
  (cond [(empty? alon) empty]
        [else (cons (list (first alon)) (make-singles (rest alon)))]))

(define (chop n alol)
  (cond [(empty? alol) empty]
        [(equal? n (first alol)) (rest alol)]
        [else (chop n (rest alol))]))

(define (merge-all-neighbors alol)
  (cond [(empty? alol) empty]
        [(empty? (rest alol)) (list (first alol))]
        [else (cons (cond [(< (first (first alol)) (first (second alol)))
                           (append (first alol) (second alol))]
                          [else (append (second alol) (first alol))])
                    (merge-all-neighbors (chop (second alol) alol)))]))