Junta-ordenado
Versão com números repetidos
O procedimento junta-ordenado tem dois parâmetros, crescente-1 e crescente-2, que são duas listas com elementos numéricos ordenados do menor para o maior. Sabe-se que junta-ordenado devolve uma lista cujos elementos são os elementos das listas dadas, em ordem crescente.
; Resolvido por: Eduardo Pinto (eduardo.pinto@fe.up.pt)
(define junta-ordenado
(lambda (crescente-1 crescente-2)
(cond
((null? crescente-1) crescente-2)
((null? crescente-2) crescente-1)
((<= (car crescente-1) (car crescente-2))
(cons (car crescente-1)
(junta-ordenado (cdr crescente-1) crescente-2)))
((>= (car crescente-1) (car crescente-2))
(cons (car crescente-2)
(junta-ordenado (cdr crescente-2) crescente-1))))))
Exemplo:
> (junta-ordenado '(1 2 7 8) '(1 3 4 5 9))
(1 1 2 3 4 5 7 8 9)
Versão sem números repetidos
O procedimento junta-ordenado-sem-repetidos, com os mesmo parâmetros que junta-ordenado, não inclui elementos repetidos na lista que devolve.
; Resolvido por: Eduardo Pinto (eduardo.pinto@fe.up.pt)
(define junta-ordenado-sem-repetidos
(lambda (crescente-1 crescente-2)
(cond
((null? crescente-1) crescente-2)
((null? crescente-2) crescente-1)
((< (car crescente-1) (car crescente-2))
(cons (car crescente-1)
(junta-ordenado-sem-repetidos (cdr crescente-1) crescente-2)))
((> (car crescente-1) (car crescente-2))
(cons (car crescente-2)
(junta-ordenado-sem-repetidos (cdr crescente-2) crescente-1)))
((= (car crescente-1) (car crescente-2))
(cons (car crescente-2)
(junta-ordenado-sem-repetidos (cdr crescente-1) (cdr crescente-2)))))))
Exemplo:
> (junta-ordenado-sem-repetidos '(1 2 7 8) '(1 3 4 5 9))
(1 2 3 4 5 7 8 9)