【问题标题】:What's wrong with my tail-recursive sum procedure?我的尾递归求和过程有什么问题?
【发布时间】:2014-05-30 15:32:56
【问题描述】:

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

代码:

(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)]

【问题讨论】:

  • 您收到错误消息了吗? “它不会运行”是什么意思?我看到你已经接受了一个答案,但它的形式表明你可能首先应该得到一个编译错误。请将其包含在问题中,以便其他用户在寻找类似问题的解决方案时可以找到它。

标签: sum scheme tail-recursion


【解决方案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。

【讨论】:

  • 谢谢!你用的是哪个ide?​​span>
  • 球拍,大量的 Ctrl+i ("Reindent All") 和 "Check Syntax" :)
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多