(define divides? (lambda (d n) (= (remainder n d) 0))) (define square (lambda (x) (* x x))) (define perfect? (lambda (n) (= (sum-of-divisors n) (* 2 n)))) (define sum-of-divisors (lambda (n) (define sum-from-plus ; sum of all divisors of n which are (lambda (low addend) ; >= low and <= n/low, plus addend (cond ((> (square low) n) addend ) ((= (square low) n) (+ addend low)) (else (sum-from-plus (+ low 1) (if (divides? low n) (+ addend low (/ n low)) addend)))))) (sum-from-plus 1 0))) (define abundant/deficient (lambda (n) (define ratio-from (lambda (k abun def); the ratio (abun + abundant #'s between k and n (if ;divided by (def + deficient #'s between k and n) (> k n) (if (not (= 0 def)) (/ abun def) -17) (ratio-from (+ k 1) (if (> (sum-of-divisors k) (* 2 k)) (+ abun 1) abun) (if (< (sum-of-divisors k)(* 2 k)) (+ def 1) def))))) (ratio-from 1 0 0)))