Buscar

Haskell aula 08

Prévia do material em texto

*
Haskell aula 08
Casamento de padrões
Prof. Msc Aurélio Andrade de Menezes Júnior.
*
Casamento de padrões
Analise o seguinte exemplo:
f x y z | (x==7) = 10
f x y z | (y==8) = 20
f x y z | (z==9) = 30
 | otherwise = 0
Sob uma notação com várias condicionais na mesma linha:
g 7 y z = 10
g x 8 z = 20
g x y 9 = 30
g x y z | (x/=7) || (y/=8) || (z/=9) 
*
Casamento de padrões
A questão aqui é: como tornar estas linhas equivalentes, uma vez que as variáveis são independentes entre si ? Há uma variável conhecida como anônonima, a qual é simbolizada por ‘_’ (em inglês é chamado de underscore). Usando esta variável anônima o código anterior pode ser reescrito da seguinte maneira:
h 7 _ _ = 10
H _ 8 _ = 20
H _ _ 9 = 30
H _ _ _ | = 0 
*
Casamento de padrões
Assim, a função ativada e executada é aquela que se ajusta com um dos padrões no argumento, ma sem considerar o conteúdo quando o argumento for ‘_’. Os identificadores são vinculados aos valores identificados para avaliação no lado direito da equação.
Os padrões permitidos são constantes tais como inteiros, valores booleanos, tuplas, nomes de parâmetros formais, etc. Os padrões não permitidos são expressões aritmétcas, relacionais ou lógicas.Os nomes de identificadores devem ser diferentes.
*
Casamento de padrões
Exemplo:
iguais :: Int -> Int -> Bool
iguais x x = True
iguais x y = False
ERRO – variável repetida em padrão!!!
 -- solução:
iguais :: Int -> Int -> Bool
iguais x y = x==y = True
iguais x y = False
*
Casamento de padrões
Aqui um ‘_’ pode ser usado quando um valor não interessa para avaliação. Por exemplo, a definição do operador lógico ou (or):
ou :: Bool -> Bool -> Bool
ou False False = False
ou _ _ = True
*
Dúvidas

Continue navegando