(define (comparator-max-in-list comp list) (let ((< (comparator-ordering-predicate comp))) (let loop ((max (car list)) (list (cdr list))) (if (null? list) max (if (< max (car list)) (loop (car list) (cdr list)) (loop max (cdr list))))))) (define (comparator-min-in-list comp list) (let ((< (comparator-ordering-predicate comp))) (let loop ((min (car list)) (list (cdr list))) (if (null? list) min (if (< min (car list)) (loop min (cdr list)) (loop (car list) (cdr list))))))) (define (comparator-max comp . args) (comparator-max-in-list comp args)) (define (comparator-min comp . args) (comparator-min-in-list comp args)) #; (define default-comparator ;Defined in comparators.scm (make-default-comparator)) (define boolean-comparator (make-comparator boolean? boolean=? (lambda (x y) (and (not x) y)) boolean-hash)) (define real-comparator (make-comparator real? = < number-hash)) (define char-comparator (make-comparator char? char=? charinteger c))))) (define char-ci-comparator (make-comparator char? char-ci=? char-ciinteger (char-downcase c)))))) (define string-comparator (make-comparator string? string=? string