Functional programming Scheme(Racket)正确编写的函数不能使用某些输入

Functional programming Scheme(Racket)正确编写的函数不能使用某些输入,functional-programming,scheme,lisp,racket,infinite-loop,Functional Programming,Scheme,Lisp,Racket,Infinite Loop,所以我在racket中写了一个计算和的函数: (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) 术语是应用于每个参数的函数。A是开始,下一个是我们如何前进到下一个元素(即a2=2*a1或a2=a1+1等),b是最后一个元素 有两个附加功能: (define (square x) (* x x)) (define (inc x) (+ x 1))

所以我在racket中写了一个计算和的函数:

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a) (sum term (next a) next b))))
术语是应用于每个参数的函数。A是开始,下一个是我们如何前进到下一个元素(即a2=2*a1或a2=a1+1等),b是最后一个元素

有两个附加功能:

(define (square x) (* x x))
(define (inc x) (+ x 1))
如果我键入:

(平方和1包括5) 我知道哪个是对的

但如果我输入:

(平方和1平方和5)


我陷入了困境!?为什么a2应该是a1*a1,a3=a2*a2,a应该超过b,所以结束递归的条件是fultifield。非常奇怪。

您的
求和
函数将永远循环,因为
(方框1)
的计算结果总是
1
,并且永远不会大于
5

您的
求和
函数将永远循环,因为
(方框1)
总是计算为
1
,并且永远不会大于
5
(/p>)永远不会大于5,因为它总是1:-)我现在感觉好笨!谢谢大家!@Diegonitecid:这是一个答案,不是评论。@Svante我觉得这是一个答案的缩写……我是否应该把它转换成一个正确的答案?@Svante好的,我是在阅读了meta上关于简短答案的一些问题后做出的回答。谢谢(正方形1)永远不会大于5,因为它总是1:-)我现在觉得好笨!谢谢大家!@Diegonitecid:这是一个答案,不是评论。@Svante我觉得这是一个答案的缩写……我是否应该把它转换成一个正确的答案?@Svante好的,我是在阅读了meta上关于简短答案的一些问题后做出的回答。谢谢