(define make-verifier (lambda (f m) (define add-up (lambda (n addend position) (if (= n 0) addend (add-up (quotient n 10) (+ addend (f position (remainder n 10))) (+ position 1))))) (lambda (number-to-check) (divides? m (add-up number-to-check 0 1))))) (define divides? (lambda (d n) (= (remainder n d) 0))) (define isbn-ok? (make-verifier * 11)) (define upc-ok? (make-verifier (lambda (i di) (cond ((even? i) (* 3 di)) ((odd? i) di))) 10))