(put-appl 'char-set-contains? '(cset char) '\#ignore (lambda (cset ch) (unless (kernel-char-set? cset) (signal 'kernel-type-error (list 'char-set? cset))) (unless (kernel-char? ch) (signal 'kernel-type-error (list 'char? ch))) (setq cset (cddr cset)) (setq ch (cdr ch)) (if (eq cset []) '\#f ;; An 'upper bound' algorithm: find the location of ;; the first number that's bigger than ch. (let ((beg 0) (rem (length cset))) (while (> rem 0) (let* ((step (/ rem 2)) (middle (+ beg step))) (if (<= (aref cset middle) ch) (setq beg (1+ middle) rem (- rem (1+ step))) (setq rem step)))) (if (eq (% beg 2) 0) '\#f '\#t)))))