2

我的完美数字函数有问题。该代码的目的是确定该数字是否为完美数字,这意味着它等于其除数之和。例如:6。我的代码有问题。这是我的功能:

(define (is-perfect x)
  (define (divides a b) (= (modulo b a) 0))
  (define (sum-proper-divisors y)
    (if (= y 1)
        1
        (if (divides y x)
            (+ y (sum-proper-divisors (- y 1)))
        (if (= x 1)
            #f
            (= (sum-proper-divisors (- x 1)
                                    x)))))))
4

1 回答 1

2

你几乎明白了!但是,有几个问题。首先,您在 中遗漏了一个案例sum-proper-divisors:您问 if yis one and if (divides y x),但是如果y不除会发生什么x

第二个问题是最后一个if表达式必须在两个辅助过程的定义之外,目前它在里面 sum-proper-divisors。正确缩进你的代码将更容易找到这种错误。

这就是正确解决方案的外观,因为这看起来像家庭作业,我会让您填写空白:

(define (is-perfect x)
  (define (divides a b)
    (= (modulo b a) 0))
  (define (sum-proper-divisors y)
    (cond ((<= y 1)
           1)
          ((divides y x)
           (+ y (sum-proper-divisors (- y 1))))
          (else
           <???>))) ; what goes in here?
  (if (= x 1)
      #f
      (= (sum-proper-divisors (- x 1)) x)))
于 2012-09-12T03:09:12.317 回答