#lang racket/base (require racket/list) (provide (all-defined-out)) (module+ test (require rackunit)) (define (list-comparator xs ys) ;; For use in sort. Compares two lists element by element. (cond [(equal? xs ys) #f] ; elements are same, so no sort preference [(and (null? xs) (not (null? ys))) #t] ; ys is longer, so #t [(and (not (null? xs)) (null? ys)) #f] ; xs is longer, so #f makes it sort later [else (let ([x (car xs)][y (car ys)]) (cond [(equal? x y) (list-comparator (cdr xs) (cdr ys))] [(and (real? x) (real? y)) (< x y)] [(and (symbol? x) (symbol? y)) (apply stringstring (list x y)))] [(and (string? x) (string? y)) (string