Next: srfi comparators constructors refine, Previous: srfi comparators constructors bytevec, Up: srfi comparators constructors [Index]
Return a comparator whose procedures make use of the comparator arguments as follows:
#t
: so does the type test predicate; otherwise, it returns
#f
.
This procedure is analogous to the expression types
select-compare
and cond-compare
from SRFI-67.
#!vicare (import (vicare) (srfi :114)) (define-constant C (make-selecting-comparator boolean-comparator exact-integer-comparator string-comparator)) ;; type test (let ((test-type (comparator-type-test-procedure C))) (test-type #t) ⇒ #t (test-type #f) ⇒ #t (test-type 1) ⇒ #t (test-type "ciao") ⇒ #t (test-type '(1 . 2)) ⇒ #f (test-type 2.0) ⇒ #f (test-type 1+2i)) ⇒ #f ;; type check (let ((check-type (comparator-check-type-procedure C))) (check-type #t) ⇒ #t (check-type #f) ⇒ #t (check-type 1) ⇒ #t (check-type "ciao") ⇒ #t (try (comparator-check-type C (void)) (catch E ((&comparator-type-error) #t) (else E)))) ⇒ #t ;; comparison (let ((compare (comparator-comparison-procedure C))) (compare #t #t) ⇒ 0 (compare #t #f) ⇒ +1 (compare #f #t) ⇒ -1 (compare 1 1) ⇒ 0 (compare 2 1) ⇒ +1 (compare 1 2) ⇒ -1 (compare "1" "1") ⇒ 0 (compare "2" "1") ⇒ +1 (compare "1" "2") ⇒ -1 (try (compare #t 1) (catch E ((&comparator-type-error) #t) (else E))) ⇒ #t (try (compare #t "ciao") (catch E ((&comparator-type-error) #t) (else E))) ⇒ #t (try (compare 1 "ciao") (catch E ((&comparator-type-error) #t) (else E)))) ⇒ #t ;; hash (let ((hash (comparator-hash-function C))) (non-negative-exact-integer? (hash #t)) ⇒ #t (non-negative-exact-integer? (hash #f)) ⇒ #t (non-negative-exact-integer? (hash 1)) ⇒ #t (non-negative-exact-integer? (hash "ciao")) ⇒ #t (try (hash 1+2i) (catch E ((&comparator-type-error) #t) (else E)))) ⇒ #t
Next: srfi comparators constructors refine, Previous: srfi comparators constructors bytevec, Up: srfi comparators constructors [Index]