(define count-parens-all (lambda (ls) (define count 2) (define count-parens (lambda (ls) (cond ((null? ls) #t) ((atom? (car ls)) (count-parens (cdr ls)) ) (else (set! count (+ count 2)) (count-parens (car ls)) (count-parens (cdr ls)) ) ) ) ) ;========== Start of Main function ================= (cond ((not (list? ls)) '("Error: argument must be a list")) (else (count-parens ls) (cons count '()) ) ) ) ) ;============== Unit Tests ====================== (load "atom.scm") (load "test.scm") (load "writeln.scm") (define msg "count-parens-all") (test msg (count-parens-all '()) '(2)) (test msg (count-parens-all '((a b) c)) '(4)) (test msg (count-parens-all '(((a () b) c) () ((d) e))) '(14)) (test msg (count-parens-all 'a) '("Error: argument must be a list"))