我正在编写一个函数,它给出了列表中所有数字的总和,忽略了单词或字母。
(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.这意味着我的代码没有到达内循环
答案 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))))