Scheme(Racket)正确编写的函数不适用于某些输入

时间:2015-01-06 13:46:10

标签: functional-programming scheme lisp racket infinite-loop

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

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

Term是应用于每个参数的函数。 A接下来是我们如何前进到下一个元素(即a2 = 2 * a1或a2 = a1 + 1等),b是最终元素。

还有2个附加功能:

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

如果我输入:

  

(sum square 1 inc 5)   我得到哪个是正确的55

但如果我输入:

  

(总和平方1平方5)

我陷入了困境!?为什么a2应该是a1 * a1和a3 = a2 * a2并且a应该超过b,因此结束递归的条件将是fultifield。很奇怪。

1 个答案:

答案 0 :(得分:8)

您的sum函数将永久循环,因为(square 1)始终评估为1且永远不会超过5