Serlin Posted November 14, 2016 at 06:34 PM Report #600514 Posted November 14, 2016 at 06:34 PM (edited) Estou a começar a aprender Haskell, e como tal comecei a fazer alguns exercícios simples. Mas deparei-me com este que não consigo responder: Basicamente o objetivo é criar uma função getExpansion, com a assinatura getExpansion :: Eq a => Rules a -> a -> [a], que dado uma lista de regras e um elemento, devolve a respectiva expansão, ou devolve o próprio elemento numa lista se não existir expansão associada. Sendo que uma regra é um par (elemento, lista de elementos), em que à lista de elementos chamamos expansão. Por exemplo, com regras = [(1,[2,1]), (2,[0,2,1])]: ghci> getExpansion regras 1 [2,1] ghci> getExpansion regras 0 [0] Nota: a função getExpansion deve ser implementada através de uma função fold. Edited November 14, 2016 at 10:23 PM by pwseo formatação do tópico
pdfrod Posted November 14, 2016 at 09:27 PM Report #600521 Posted November 14, 2016 at 09:27 PM Não consegues responder porquê? O que é que já tentaste?
Baderous Posted December 26, 2016 at 10:26 PM Report #601515 Posted December 26, 2016 at 10:26 PM Para efeitos de documentação (uma vez que creio que o problema já não exista devido à ausência de feedback), deixo aqui uma solução, usando as 2 vertentes do fold: type Expansion a = [a] type Rule a = (a,Expansion a) type Rules a = [Rule a] regras :: Rules Int regras = [(1,[2,1]),(2,[0,2,1])] getExpansion :: Eq a => Rules a -> a -> [a] getExpansion [] x = [x] getExpansion ((el,exp):rs) x | el==x = exp | otherwise = getExpansion rs x getExpansionFoldr :: Eq a => Rules a -> a -> [a] getExpansionFoldr rs x = foldr (\(el,exp) y -> if (el==x) then exp else y) [x] rs getExpansionFoldl :: Eq a => Rules a -> a -> [a] getExpansionFoldl rs x = foldl (\y (el,exp) -> if (el==x) then exp else y) [x] rs Mais sobre foldr e foldl aqui: https://www.portugal-a-programar.pt/forums/topic/23522-duvida-na-ficha-4-de-lei-outra-duvida/?do=findComment?comment=229861https://www.portugal-a-programar.pt/forums/topic/23692-fun%C3%A7%C3%A3o-fold/?do=findComment?comment=230858 1 Report
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