From 768e07139b909652b58d106efa6b6df6f33539fc Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 30 Sep 2020 13:01:31 -0400 Subject: [PATCH] Initial file --- srfi/comparators/162-impl.scm | 92 +++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 srfi/comparators/162-impl.scm diff --git a/srfi/comparators/162-impl.scm b/srfi/comparators/162-impl.scm new file mode 100644 index 00000000..0438889e --- /dev/null +++ b/srfi/comparators/162-impl.scm @@ -0,0 +1,92 @@ +(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 + (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