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

あなたはほとんどそれを手に入れました!ただし、いくつかの問題があります。まず、 のケースがありません。が 1 で、 が であるかどうsum-proper-divisorsかを尋ねますが、 がを除算しない場合はどうなりますか?y(divides y x)yx

2 番目の問題は、最後のif式が 2 つのヘルパー プロシージャの定義の外にある必要があることです。現在は内にあり 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 に答える