Rapeize, por falar em usar mais a lista...

1 view
Skip to first unread message

eduardo malaguti

unread,
Apr 1, 2009, 5:25:16 PM4/1/09
to htdp-...@googlegroups.com
Aqui vai um problema que ta tirando o meu sono:

;;Exercise 11.2.4.   Lists may contain lists that contain lists and so on. Here is a data definition that takes this idea to an extreme:

;A deep-list is either
;
;   1. s where s is some symbol or
;   2. (cons dl empty), where dl is a deep list.
;
;Develop the function depth, which consumes a deep list and determines how many times cons was used to construct it.
;
;Develop the function make-deep, which consumes a symbol s and a natural number and produces a deep list containing s and constructed with n conses.

;; Contract : depth : deep list -> number

;; Example :
;;(depth (cons 'car (cons 'ball (cons (cons 'doll (cons 'robot empty)) empty))))

;; Definition :
(define (depth dl)
  (cond
    [(empty? dl) 0]
    [else (cond
            [(cons? (first dl)) (add1 (depth (rest dl)))]
            [else (depth (rest dl))])]))
           

;; Tests :
(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!

--
Eduardo "Barbosa" Santaella Malaguti

Eduardo Bellani

unread,
Apr 1, 2009, 7:07:53 PM4/1/09
to htdp-...@googlegroups.com
;; Contract : depth : deep list -> number

;; 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)

eduardo malaguti

unread,
Apr 1, 2009, 7:43:43 PM4/1/09
to htdp-...@googlegroups.com
VALEU BELLANI!

vou dormir tranquilo hoje

ps: boa dica a do DD.

2009/4/1 Eduardo Bellani <ebel...@gmail.com>

ebel...@gmail.com

unread,
Apr 1, 2009, 7:53:44 PM4/1/09
to htdp-...@googlegroups.com
Um exemplo mais significativo pro pessoal sacar o que é DD

;; evens-only* : list -> list
;; removes all odd members from a list of
;; nested lists

;; vou fazer em portuga mesmo o DD
;; o nlist (nested list) pode ser:
;; vazio
;; ou o primeiro elemento é um número
;; esse número é even?
;; nao é even entao
;; não é um símbolo então
;;
;; qual a tradução de então???? ELSE!!!!!!!!!!!!!!!

(define (evens-only* nlist)
(cond
[(empty? nlist) empty]
[(number? (first nlist))
(cond
[(even? (first nlist))
(cons (first nlist)
(evens-only* (rest nlist)))]
[else
(evens-only* (rest nlist))])]
[else
(cons
(evens-only* (first nlist))
(evens-only* (rest nlist)))]))

(equal? (evens-only* (list 3 4 (list 2 (list 5 1 11)))) (list 4 (list 2 empty)))
signature.asc
Reply all
Reply to author
Forward
0 new messages