;; Example :
;;(depth (cons 'car (cons 'ball (cons (cons 'doll (cons 'robot empty)) empty))))
;; Data Definition
;; VOU ESTRESSAR DE NOVO
;; A IMPORTANCIA DO DATA DEFINITION
;; AQUI SE DEFINE QUANTAS CLÁUSULAS
;; DE COND VAI TER A FUNCAO
;; ISSO VEM ANTES DOS EXEMPLOS E TESTES!!
;; lista vazia
;; primeiro elemento é um símbolo
;; primeiro elemento é uma lista (else)
;; CLARAMENTE 3 NESSE CASO
;; Definition :
(define (depth dl)
(cond
[(empty? dl) 0] ;EQUIVALENTE A PRIMEIRA LINHA DO DATA DEFINITION
[(symbol? (first dl)) ;EQUIVALENTE A SEGUNDA
(depth (rest dl))]
[else ;EQUIVALENTE A TERCEIRA
(+
(add1 (depth (first dl)))
(depth (rest dl)))]))
;; Tests :
(depth (cons 'car (cons 'ball (cons (cons 'doll (cons 'robot empty)) empty))))
(equal? (depth (cons 'car (cons 'ball (cons (cons 'doll (cons 'robot
empty)) empty)))) 1) ;dá certo
(equal? (depth empty) 0) ;dá certo
(equal? (depth (cons (cons 'car empty) empty)) 1) ;dá certo
(equal? (depth (cons (cons (cons 'car empty) empty) empty)) 2); MAS
ESSE FILHA DA PUTA AQUI NÃO!
(equal? (depth (cons (cons (cons (cons 'car empty) empty) empty) empty)) 3)