方案(球拍)正确编写的功能不适用于某些输入

Scheme (Racket) Properly written function not working with some inputs

所以我在球拍中编写了 I 函数来计算总和:

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a) (sum term (next a) next b))))

术语是应用于每个参数的函数。 A 是开始 next 是我们前进到下一个元素的方式(即 a2 = 2*a1 或 a2 = a1 +1 等),b 是最后一个元素。

还有2个附加函数:

(define (square x) (* x x))
(define (inc x) (+ x 1))

如果我输入:

(sum square 1 inc 5) I get which is correct 55

但是如果我输入:

(sum square 1 square 5)

我陷入了一个循环!?为什么 a2 应该是 a1*a1 和 a3=a2*a2 并且 a 应该超过 b 所以结束递归的条件将是 fultifield。很奇怪。

您的 sum 函数将永远循环,因为 (square 1) 的计算结果始终为 1,并且永远不会大于 5