这个简单的'buggy-sum'代码出了什么问题?

时间:2013-04-21 17:29:03

标签: lisp scheme

我明天参加考试,这是一个错误的作业问题。我已经坚持了一段时间,有人可以告诉我解决方案是什么吗?

问题是,你如何修复这段代码:

(define (buggy-sum lst)
  (+ (car lst) (buggy-sum (cdr lst))))

(buggy-sum (list 1 2 3 4))

我的解决方案如下,但这是错误的:

(define (buggy-sum lst)
  (cond [(null? lst) '()]
        [else (+ (car lst) (buggy-sum (cdr lst)))]))

(buggy-sum (list 1 2 3 4))

有人能告诉我正确的解决方案是什么吗?

1 个答案:

答案 0 :(得分:6)

你的边缘情况是错误的。如果列表为null,则返回另一个空列表,并且应该返回一个int。只需将[(null? lst) '()]替换为[(null? lst) 0]