1;;; 2;;; srfi-162 - comparator sublibraries 3;;; 4 5;; This is an addition to srfi-128. 6 7(define-module srfi-162 8 (export comparator-min comparator-max 9 comparator-min-in-list comparator-max-in-list 10 11 ;; The followings are built-in. 12 default-comparator 13 boolean-comparator 14 real-comparator 15 char-comparator 16 char-ci-comparator 17 string-comparator 18 string-ci-comparator 19 pair-comparator 20 list-comparator 21 vector-comparator 22 eq-comparator 23 eqv-comparator 24 equal-comparator)) 25(select-module srfi-162) 26 27(define (comparator-min-in-list cmpr lis) 28 (assume (not (null? lis))) 29 (let loop ([r (car lis)] [xs (cdr lis)]) 30 (cond [(null? xs) r] 31 [(<? cmpr (car xs) r) (loop (car xs) (cdr xs))] 32 [else (loop r (cdr xs))]))) 33 34(define (comparator-max-in-list cmpr lis) 35 (assume (not (null? lis))) 36 (let loop ([r (car lis)] [xs (cdr lis)]) 37 (cond [(null? xs) r] 38 [(>? cmpr (car xs) r) (loop (car xs) (cdr xs))] 39 [else (loop r (cdr xs))]))) 40 41(define (comparator-min cmpr x . xs) 42 (comparator-min-in-list cmpr (cons x xs))) 43 44(define (comparator-max cmpr x . xs) 45 (comparator-max-in-list cmpr (cons x xs))) 46 47 48 49