;; ;; tree-in-class.scm ;; ;; representation : ;; node : (name left branch) ;; (define (new-node name left right) ;; same as (list name left right) (cons name (cons left (cons right '())))) (define (new-leaf name) (new-node name '() '())) (define (node-name node) (car node)) (define (node-left node) (car (cdr node))) ;; same as cadr (define (node-right node) (car (cdr (cdr node)))) ;; same as caddr (define ABCDE (new-node 'A (new-leaf 'B') (new-node 'C' (new-leaf 'D') (new-leaf 'E')))) (define (count-nodes tree) (if (null? tree) 0 (+ (count-nodes (node-left tree)) (count-nodes (node-right tree)) 1))) (printf "tree ABCDE has ~a nodes.\n" (count-nodes ABCDE))