List 列表中数字的总和
我正在写一个函数,它给出一个列表中所有数字的和,忽略单词或字母List 列表中数字的总和,list,scheme,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)))) ) ) (深和’(a2(b(1c))3))=>;应该返回6 但是我得了5分。这意味着我的代码没有到达内部循环如果要检查嵌
(define (sum-list ls)
(cond ((null? ls) 0)
((not (number? (car ls))) (sum-list(cdr ls)))
(else (+ (car ls) (sum-list (cdr ls))))
)
)
(深和’(a2(b(1c))3))=>;应该返回6
但是我得了5分。这意味着我的代码没有到达内部循环如果要检查嵌套列表,必须有另一个条件来检查元素是否是列表,然后递归调用sum list 在
null?
条件下添加这一行就可以了
((list?(car ls))(+(sum list(car ls))(sum list(cdr ls)))
如果要检查嵌套列表,必须有另一个条件来检查元素是否为列表,然后递归调用sum list
在null?
条件下添加这一行就可以了
((列表)(汽车ls))(+(总和列表(汽车ls))(总和列表(cdr ls)))
这不是遍历列表的方法,它更像这样:
(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
这不是遍历列表的方法,它更像这样:
(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