Ir para o conteúdo
Nazgulled

[Haskell] Dúvida: Não entendo como está a funcionar a função takeWhile

Mensagens Recomendadas

Nazgulled    8
Nazgulled

Numa determinada aula, estivemos a refazer funções que já existem no Haskell para termos prática nestas coisas e vermos como elas funcionam... No entanto, em algumas delas (que usam assinaturas parecidas) eu não entendi certas partes delas e gostava de ficar esclarecido em como é que elas estão a funcionar. Por exemplo, a seguinte função:


takeWhile :: (a -> Bool) -> [a] -> [a]

takeWhile c (h:t)

              | c h = h:takeWhile c t

takeWhile _ _ = []


O que eu não percebo o que é e como funciona nesta função, são as partes que se encontram coloridas e sublinhadas. A que também está a negrito é que não captei mesmo que condição é e como é que funciona :S

Podem explica-las o que são e como funcionam?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

a função takeWhile recebe uma função como argumento (uma função que recebe um valor do tipo a e devolve um Bool), para além de uma lista.

logo em takeWhile c (h:t) o c é uma função e o h é um elemento de uma lista. logo nós podemos fazer c h, ou seja, aplicar a função c ao elemento h.

P.S.: em vez de takeWhile c (h:t) | c h =... façam takeWhile funcao (h:t) | funcao h =.... talvez ajude a compreender melhor como funciona (visto que o c vai representar uma função).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

@Onumis

A prof? Quem é que tens como prof? A mim quem me deu isto foi o JBB e ele explica bem, eu é que já tava a ficar um bocado farto de estar na aula e não tinha o portátil comigo para ir exprimentado o que tava a ser feito no quadro. E sim, sou de LEI.

@Rui Carlos

Mais uma vez obrigado pela ajuda que me tens dado em Haskell... Realmente a olhar po código n estava a perceber, mas com a tua explicação e exprimentado aqui no ghci, já captei o que significa aquilo tudo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

Não sei... n tenho ido a todas as teóricas, só quando não me dá sono... Mas és de LEI também?

E o teu nº e nome de praxe não me diz nada porque eu já não sou caloiro.

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