我正在尝试编写一个迭代过程,如果多维数据集的总和等于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。我该如何解决?
答案 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
功能对应于您的iter
,conjecture
可以重写为:
(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