所以我要做一个叫做frac sum的函数,它取两个函数的分数之和,从-n到n so f(n)/g(n)作为分数,从-n到n so f(-n)/g(-n)+…f(n)/g(n)
它需要三个形式参数f g和n。
到目前为止,我已经有了这个功能,但最终进入了递归循环,这意味着我的基本情况有问题:
(define (negn n) (- (* n -1) 1))
(negn 1)
(define (frac-sum f g n)
(cond ((= n (negn n)) 0)
((= (g n) 0) (+ 0 (frac-sum f g (- n 1))))
((+ (/ (f n) (g n)) (frac-sum f g (- n 1))))))
我用这个测试它应该输出两个:
(分形和(lambda(x)(-x 1))(lambda(x)x)1)
最佳答案
语句“cc>”将不存在一个整数n
。这是函数无限循环的原因。
由于要在n = (n * -1) - 1
范围内迭代,因此可以在函数中定义这两个值,并可以递增下限或递归递减上限。然后可以通过测试下限是否等于上限来终止函数。
(define (frac-sum f g n)
(let loop ((neg (- n)) (pos n) (acc 0))
(cond
((= neg pos) acc)
((zero? (g neg))
(loop (add1 neg) pos acc))
(else
(loop (add1 neg) pos (+ (/ (f neg) (g neg)) acc))))))
例如:
(frac-sum (lambda (x) (- x 1)) (lambda (x) x) 1)
=> 2