[英]scheme sum of the numbers in a list
我正在編寫一個函數,該函數給出列表中所有數字的總和,而忽略了單詞或字母。
(define (sum-list ls)
(cond ((null? ls) 0)
((not (number? (car ls))) (sum-list(cdr ls)))
(else (+ (car ls) (sum-list (cdr ls))))
)
)
(deep-sum'(a 2(b(1 c))3))=>; 應該返回6。
但是我得到了5.這意味着我的代碼沒有到達內循環
那不是遍歷列表列表的方式,它更像是這樣:
(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
如果要檢查嵌套列表,則必須具有另一個條件,即檢查元素是否為列表,然后遞歸調用sum-list。
將此行添加到null?
下方null?
條件應該做到的。
((list? (car ls)) (+ (sum-list (car ls)) (sum-list (cdr ls))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.