所以我要做一个叫做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

10-06 12:08