2013-02-19 2 views
1

Я пытаюсь создать схему рекурсивной функции deep_count, которая подсчитывает сумму чисел, даже если она вложена в подписок.Схема recursion

(define deep_count 
    (lambda (xs) 
    (cond 
     ((empty? xs) 0) 
     ((list? (first xs)) (+ 
          (deep_count (first xs)) 
          (deep_count (rest xs)))) 
     (else (+ 1 (deep_count (rest xs))))))) 

(deep_count '(1 2 3 (4 5 6) ((7 8 9) 10 (11 (12 13))))) 

Но я получаю 13 вместо 91. Что здесь не так?

EDIT: неважно, я знаю почему.

ответ

2

В конце есть небольшая ошибка. Изменить это:

(+ 1 (deep_count (rest xs))) 

... Для этого, и вы все сделали:

(+ (first xs) (deep_count (rest xs)))