;;merge-sort : list-of-numbers -> list-of-numbers
(define (merge-sort l) (cond [(empty? l) empty] [else (merge (merge-sort (evens l)) (merge-sort (odds l)))])) ;;merge : list-of-numbers list-of-numbers -> list-of-numbers
(define (merge l1 l2) (cond [(empty? l1) l2] [(empty? l2) l1] [else (cond [(<= (first l1) (first l2)) (cons (first l1) (merge (rest l1) l2))] [else (cons (first l2) (merge l1 (rest l2)))])])) ;;evens : non-empty-list-of-numbers -> list-of-numbers
;; to extract alternating elements ofl
, skipping the first one. (define (evens l) (cond [(empty? (rest l)) empty] [else (odds (rest l))])) ;;odds : non-empty-list-of-numbers -> list-of-numbers
;; to extract alternating elements ofl
, starting with the first one. (define (odds l) (cond [(empty? (rest l)) l] [else (cons (first l) (evens (rest l)))])) ;; (some) examples (evens (list 1 2 3 4)) = (list 2 4) (odds (list 1 2 3 4)) = (list 1 3)
Is the function merge-sort
generative or structurally recursive?
Solution
Generative
Is the function merge
generative or structurally recursive?
Solution
Structural