;;; Extend comparisons to 0 and 1 arguments. ;; 2017-10-04 Sudarshan S Chawathe ;; For each (name . base-name) pair in arguments, define name to be ;; comparison procedure similar to base-name, but allow it to accept 0 ;; or 1 arguments in addition to more (as permitted by base-name), ;; returning true in the former cases. (define-syntax define-comparison/base/pairs (syntax-rules () ((_ (name . base-name) ...) (begin (define (name . strs) (or (null? strs) (null? (cdr strs)) (apply base-name strs))) ...)))) (: string=? (#!rest string -> boolean)) (: string boolean)) (: string>? (#!rest string -> boolean)) (: string<=? (#!rest string -> boolean)) (: string>=? (#!rest string -> boolean)) (: string-ci=? (#!rest string -> boolean)) (: string-ci boolean)) (: string-ci>? (#!rest string -> boolean)) (: string-ci<=? (#!rest string -> boolean)) (: string-ci>=? (#!rest string -> boolean)) ;; Extend the usual string comparison procedures as above. (define-comparison/base/pairs (string=? . base-string=?) (string? . base-string>?) (string<=? . base-string<=?) (string>=? . base-string>=?) (string-ci=? . base-string-ci=?) (string-ci? . base-string-ci>?) (string-ci<=? . base-string-ci<=?) (string-ci>=? . base-string-ci>=?)) ;;;