Haskell

verifica :: a -> [a] -> Bool
verifica x (h:t) = elem x (h:t)


Alguem me consegue dizer o que está mal nesta função?
É suposto verificar se x pertence á lista...
 
Se apagares a primeira linha deve funcionar. Depois corre, no ghci:

Código:
Prelude> :t verifica

para veres a declaração que é inferida automaticamente.
 
Ainda estou a aprender Haskell, mas talvez te possa ajudar.

verifica :: Eq a => a -> [a] -> Bool

Neste caso, como queres verificar se x é igual a algum elemento da lista, estás a comparar x com os elementos da lista, ou seja, a ver se são iguais ou diferentes. Por isso precisas da classe Eq, penso. :)
De qualquer forma, tenta informar-te melhor e vê se desta forma está correto.

"The Eq class defines equality (==) and inequality (/=)"
 
Eu acho que a ideia do exercício é fazeres tu a função e não invocar a função que já te faz isso.

verifica::Eq a=> a -> [a] -> Bool
verifica _ [] = False
verifica x (h:t) | x==h = True
|otherwise = verifica x t
 
Back
Topo