Ir para o conteúdo
conde

Dúvida em função recursiva

Mensagens Recomendadas

conde    0
conde

Boas,

Eu tou aqui com uma dúvida numa função definida recursivamente. Em tempos já percebi este detalhe, agora voltei a pegar em haskell e não estou a conseguir visualizar o motivo de isto ser definido assim. A função é a seguinte:

drop :: Int -> [a] -> [a]
drop 0 xs = xs
drop (n+1) [] = []
drop (n+1) (_:xs) = drop n xs

Para quem está familiarizado com o prelude sabe o que esta função faz, recebe um inteiro e uma lista, e devolve a lista sem n primeiros elementos.

A minha dúvida está no funcionamento do (n+1) nos últimos dois casos, não tou a conseguir perceber como é que esse n+1 vai garantir que o "loop recursivo" pare. Porque (n+1) e não só n? Alguém que me possa esclarecer pff?

Desde já obrigado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

Na 3ª linha, o n+1 é dispensável e pode ser substituído pelo underscore, pois retirar qualquer elemento que seja duma lista vazia dá sempre lista vazia.

Quanto ao n+1, podes usar n se quiseres, só tens é de adaptar depois no resto da definição:

drop' :: Int -> [a] -> [a]
drop' _ [] = []
drop' 0 l = l
drop' n (x:xs) = drop' (n-1) xs

Como vês, neste caso já usei o n em vez de n+1, mas na 4ª linha, tive de usar n-1 na chamada recursiva.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade