我的尾递归求和程序有什么问题?

时间:2014-05-30 15:32:57

标签: sum scheme tail-recursion

我的尾递归求和程序出了什么问题?我的尾递归方案程序不会运行。

代码:

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

 (define (increment x)(+ x 1))

 (define (sum-square a b)

    (sum (lambda(x)(* x x)) a increment b))

 (define (sum-int a b)
    (define (identity a) a)

    (sum identity a increment b))


(sum-int 5 10)
(sum-square 5 10)

错误:

Error: execute: unbound symbol: "result" [sum-int, (anon), sum, (anon), sum-square, sum, (anon)]

1 个答案:

答案 0 :(得分:1)

sum中有括号问题。试试这个:

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

特别注意这一行是错误的,这不是你定义程序的方式:

(define iter result i)

相应的右括号也是错误的。正确缩进和格式化代码的严格规则将使这些错误更容易捕获,为此使用一个好的IDE。