1.
Analisar o procedimento x.
(define x (lambda (y) (cond ((null? y) 1) ((and (odd? (car y)) (not (negative? (car y)))) (* (car y) (x (cdr y)))) (else (x (cdr y))))))
Escolher um nome apropriado para o procedimento
produto-dos-pares-não-negativos
2.
a) Completar o procedimento quantos-de-cada.
b) Definir o procedimento conta.
Considere o seguinte programa.
> (quantos-de-cada '(1 2 34 2 5 6 7 6 8 3 41 500 5))
((1 1) (2 2) (3 1) (5 2) (6 2) (7 1) (8 1) (34 1) (41 1) (500 1))
> (quantos-de-cada '(115))
((115 1))
(define quantos-de-cada
(lambda (lista)
(if (null? lista)
'()
(let ((m (apply min lista)))
(cons
(list m (conta m lista))
(quantos-de-cada (retira m lista))
)))))
; dá o número de ocorrência do elemento e na lista lis
(define conta
...
; dá a lista que se obtém da lista lis retirando todas as ocorrências do
; elemento e
(define retira
...
;;não era pedido!!!
(define retira
(lambda (e lis)
(cond ((null? lis) '())
((= (car lis) e) (retira e (cdr lis)))
(else (cons (car lis) (retira e (cdr lis)))))))
(define conta
(lambda (e lis)
(cond ((null? lis) 0)
((equal? e (car lis)) (add1 (conta e (cdr lis))))
(else (conta e (cdr lis))))))