map
ou filter
- ignore a menção às funções foldl
e
foldr
, que nós ainda não estudamos), 26, 27 (só a versão
que não usa foldr
), 28, 29 e 30.(merge l1 l2)
, que recebe duas listas de
números, l1
e l2
, ambas em ordem crescente, e
devolve uma terceira lista, também em ordem crescente, com os mesmos
elementos que as duas listas recebidas. Em outras palavras, a função
merge
devolve a intercalação de duas listas numéricas
crescentes. Sua implementação de merge
não precisa usar
recursão de cauda. Ela deve ser eficiente, ou seja, a função
merge
deve percorrer as listas l1
e
l2
apenas uma vez.merge
de modo que a recursão seja de
cauda. Como no exercício anterior, as listas l1
e
l2
devem ser percorridas apenas uma vez. Dicas:
merge
chamar uma função auxiliar que
recebe um parâmetro adicional, o qual é uma lista contendo a
"intercalação parcial reversa" das duas listas dadas.Este trabalho deve ser entregue até o dia 20 de março, por meio do sistema Paca/Moodle. (N.B.: Entregue só as soluções desses dois exercícios. Não mande soluções dos exercícios do Krishnamurthy.)
Deve ser entregue um arquivo fonte em Scheme. Para entregar as duas versões da
função merge
no mesmo arquivo-fonte, renomeie a primeira versão
(a que não usa recursão de cauda) para simple-merge
.
O nome do arquivo entregue deve ser da forma
ep0-
<seu-nome>.rkt
ou
ep0-
<seu-nome>.scm
.
Por exemplo: ep0-fulano-de-tal.rkt
. No nome do arquivo devem ser
omitidos os acentos do seu nome. Além disso, a separação entre palavras não
deve ser feita com espaços. Ou seja, o arquivo não deve se chamar
"ep0-joão-da-silva.rkt
" nem
"ep0 joao da silva.rkt
".