检查立方体总和的方案程序等于和猜想的平方

时间:2018-03-21 16:57:11

标签: scheme

我正在尝试编写一个迭代过程,如果多维数据集的总和等于sum的平方为真,则返回#t,否则当第一个整数< = n且猜测为假时返回#f。

(define (square x) (* x x))
(define (cube x) (* x x x))

(define (conjecture n)
  (define (iter count result_c result_s)
    (cond ((= n 0) #f)
          (else (iter (+ count 1) (= (cube (+ count 1)) (square (+ count 1))) #t))))
  (iter 1 0 0))

我的代码总是返回#f。我该如何解决?

1 个答案:

答案 0 :(得分:1)

也许单独写下“平方和”和“多维数据集之和”功能可能会帮助您更好地了解如何将它们组合起来。

假设我们想要将1和n之和平方,即:(1 + 2 + ... + n)²。我们可以编写如下函数:

(define (square-of-sum a b acc)
  (if (> a b)
      (sqr acc)                                    ;; square the sum upon return
      (square-of-sum (add1 a) b (+ acc a))))

同样,要将立方值从1加到n,即:1³ + 2³ + ... + n³,我们可以写:

(define (sum-of-cubed a b acc)
  (if (> a b)
      acc
      (sum-of-cubed (add1 a) b (+ acc (expt a 3)))))

因此将它们与您期望的效果相结合将如下所示:

(define (combined a b cubed-acc sum-acc )
  (if (> a b)
      (= cubed-acc (sqr sum-acc))
      (combined (add1 a) b (+ cubed-acc (expt a 3)) (+ sum-acc a))))

上面的combined功能对应于您的iterconjecture可以重写为:

(define (conjecture n)
  (define (iter count cube-sum sum)
    (cond
      ((> count n)
       (= cube-sum (sqr sum)))
      (else
       (iter (add1 count)
             (+ cube-sum (expt count 3))
             (+ sum count)))))
  (iter 1 0 0))

然后对于任何自然数n,您将拥有:

(conjecture n)
=> #t