没有回复我需要的答案

时间:2012-09-26 02:22:47

标签: scheme

(define (checksum-2 ls)
  (if (null? ls) 
      0
      (let ([n 0])
        (+ (+ n 1))(* n (car ls))(checksum-2 (cdr ls)))))

好吧,我有这个代码,它假设,如果我写得正确,数字(n)每次通过列表时应该增加1,所以n(实际上)应该像1 2 3 4 ,但我希望n乘以列表中的汽车。

所有东西都加载了,但是当答案返回时我得到0。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您以不同的方式格式化代码,您可能会更容易看到正在发生的事情:

(define (checksum-2 ls)
  (if (null? ls) 
      0
      (let ([n 0])
        (+ (+ n 1))
        (* n (car ls))
        (checksum-2 (cdr ls)))))

let表单中,表达式按顺序进行计算,但您没有使用任何结果(最后一个除外)。加法和乘法的结果被简单地丢弃了。

在这种情况下,您需要做的是定义一个 new 辅助函数,该函数使用累加器并执行递归调用。我猜这是家庭作业或学习练习,所以我不打算给出完整的答案。

UPDATE :作为您可能需要做的事情的演示,这里有一个类似的函数,用于将1n的整数求和:

(define (sum n)
  (define (sum-helper n a)
    (if (<= n 0)
        a
        (sum-helper (- n 1) (+ a n))))
  (sum-helper n 0))

您应该能够使用类似的框架来实现checksum-2功能。