2016-10-24 2 views
0

목록에있는 모든 숫자의 합계에 단어 나 알파벳을 무시하는 함수를 작성했습니다.스킴 목록의 숫자 합

(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 '(a2 (b (1c)) 3)) =>; 반환해야합니다 6.

하지만 난 내 코드는 내부 루프에 도달하고 있지 않음을 의미 5. 무엇입니까

답변

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 
0

해당 요소가리스트 인 경우, 당신은 확인 다른 조건이 있어야합니다 중첩 된 목록을 확인하려면 , 그리고 sum-list를 재귀 적으로 호출하십시오.

이 줄을 null? 조건 아래에 추가하면됩니다. 목록의 목록을 통과하는 방법이 아니다

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