我想去那件事,但我不知道怎么做编写一个函数find-abundant,以正数和作为参数生成不大于给定数的所有丰裕数的列表,按顺序从从最大到最小。(find-abundant 25)
(define (find-abundant n)
(define (check-abundant n)
(define (sum-of-proper-divisors n)
(let loop ((i (sub1 n)))
(cond
[(= i 1) 1]
[(= (remainder n i) 0)
(+ i (loop (sub1 i)))]
[else (loop (sub1 i))])))
(cond
((> (sum-of-proper-divisors n) n) 1)
(else 0)))
(define (enumerate-interval high low)
(if (> low high)
null
(cons high (enumerate-interval (- high 1) low))))
(filter (lambda (n)
(= (check-abundant n) 1))
(enumerate-interval (- n 1) 12)))
乍一看可能很复杂,但在find-abundant中有两个嵌套过程,而check-abundant中也有一个嵌套过程,即固有除数和。您也可以分离所有的过程。