crislanio_macedo Posted March 21, 2014 Report Share Posted March 21, 2014 para que serve a notação @ em haskell ? alguém poderia da-me um exemplo! Link to comment Share on other sites More sharing options...
pwseo Posted March 21, 2014 Report Share Posted March 21, 2014 Serve para atribuires nomes a padrões; mais especificamente, o nome à esquerda do @ pode ser utilizado para te referires ao padrão à direita. Um pequeno exemplo: fn (x:xs) = x:x:xs Essencialmente estamos a duplicar o primeiro elemento de uma lista. Parece-me simples de compreender. E agora usando os "as patterns": fn y@(x:xs) = x:y Estamos a dizer ao compilador que y é o mesmo que (x:xs), e por isso podemos simplificar a expressão. Obviamente, este é um exemplo forçado e bastante simples, mas ilustra bem como funciona a notação referida. Em tipos de dados mais complexos esta notação é muito útil quando precisamos de nos referir tanto aos campos individuais do objecto como ao próprio objecto na sua totalidade numa mesma função: -- original fn (Tipo a b c d) = g (Tipo a b c d) (d + 3) -- as pattern fn t@(Tipo _ _ _ d) = g t (d + 3) 2 Report Link to comment Share on other sites More sharing options...
Popular Post pdfrod Posted March 21, 2014 Popular Post Report Share Posted March 21, 2014 Vou tentar motivar a utilidade do @, com o seguinte exemplo: fun (1, y, z) = foo (1, y, z) fun (2, y, z) = bar (2, y, z) A função fun recebe um tuplo de 3 elementos, e invoca a função foo ou bar dependendo do valor do primeiro elemento do tuplo. A parte chata é que para passar o tuplo para a função seguinte, foi preciso escrever de novo conteúdo do tuplo. A notação @ serve para evitar esse trabalho, permitindo dar um nome ao tuplo. Exemplo: fun t@(1, y, z) = foo t fun t@(2, y, z) = bar t A notação @ também pode ser usada com listas ou qualquer tipo de dados algébricos. Exemplo: fun z@(x : xs) = if x > 0 then foo z else bar z 3 Report Link to comment Share on other sites More sharing options...
crislanio_macedo Posted March 21, 2014 Author Report Share Posted March 21, 2014 valeu pessoal grato. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now