Jump to content

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


Recommended Posts

Posted

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?

Posted

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).

Posted

@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.

Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.