方案中列表中数字的总和

时间:2016-10-24 21:43:52

标签: list scheme

我正在编写一个函数,它给出了列表中所有数字的总和,忽略了单词或字母。

(define (sum-list ls)
  (cond ((null? ls) 0)
        ((not (number? (car ls))) (sum-list(cdr ls)))
        (else (+ (car ls) (sum-list (cdr ls))))
        )
  )

(深和'(a 2(b(1 c))3))=> ;应该返回6。

但我得到5.这意味着我的代码没有到达内循环

2 个答案:

答案 0 :(得分:3)

这不是遍历列表列表的方式,它更像是这样:

(define (deep-sum ls)
  (cond ((null? ls) 0)
        ((not (pair? ls))            ; only add atoms
         (if (number? ls) ls 0))     ; only add numbers
        (else (+ (deep-sum (car ls)) ; advance recursion on both car and car
                 (deep-sum (cdr ls))))))

现在它按预期工作:

(deep-sum '(a 2 (b (1 c)) 3))
=> 6

答案 1 :(得分:0)

如果要检查嵌套列表,则必须有另一个条件来检查该元素是否为列表,然后递归调用sum-list。

null?条件下添加此行应该这样做。

((list? (car ls)) (+ (sum-list (car ls)) (sum-list (cdr ls))))