#lang scheme
(provide (all-defined-out))
;; Don't change the lines above unless you know what you're doing. --Dana

;; sum-squares-largest : number number number -> number
;; Given three numbers, returns the sum of the squares of the larger two.
(define (sum-squares-largest x y z) 'not-implemented)

;; sublist : list number number -> list
;; Returns the sublist of lst from start to end exclusive (like substring).
(define (sublist lst start end) 'not-implemented)

;; choose : number number -> number
;; Given non-negative integers n and k, recursively computes n choose k
;; using the identity (n choose k) = (n-1 choose k-1) * n/k
;; where, as a base case, (n choose k) = 1 if k = 0.
(define (choose n k) 'not-implemented)

;; first-half : list -> list
;; Returns the first half of the list, as nearly as possible.
;; When the list is odd in length, the first half is the shorter.
(define (first-half lst) 'not-implemented)

;; second-half : list -> list
;; Returns the second half of the list, as nearly as possible.
;; When the list is odd in length, the second half is the longer.
(define (second-half lst) 'not-implemented)

;; merge : predicate list list -> list
;; Given a predicate p and 2 lists sorted according to p,
;; merges the lists into a single list sorted according to p.
(define (merge p left right) 'not-implemented)

;; merge-sort : predicate list -> list
;; Returns a list of the elements in lst sorted according to predicate p.
;; Uses these functions defined above: first-half, second-half, merge.
(define (merge-sort p lst) 'not-implemented)

;; sort-numbers-decreasing : list-of-nums -> list-of-nums
;; Given a list of numbers, returns a list of those numbers in decreasing order.
;; (OK, non-increasing order technically, but the name is long enough already!)
;; (You don't need to modify this if merge-sort is implemented correctly.)
(define (sort-numbers-decreasing lst) (merge-sort > lst))

;; sort-strings-increasing : list-of-strings -> list-of-strings
;; Given a list of strings, returns a list of those strings in increasing order.
;; (You don't need to modify this if merge-sort is implemented correctly.)
(define (sort-strings-increasing lst) (merge-sort string<? lst))
