this repo has no description
at main 1.5 kB view raw
1* Function Composition 2 3Composicao de funcao tem a mesma sintaxe e declarao quando utilizamos na matematica, segue um exemplo de como seria o assinatura da funcao: 4#+begin_src haskell 5(f . g) x = f (g x) 6(.) :: (b -> c) -> (a -> b) -> (a -> c) 7f . g == f (g x) 8#+end_src 9 10Nessa assinatura, declaramos que recebemos uma funcao que recebe B e retorna C (esta primeira ira receber o valor da proxima funcao), a proxima funcao que ira receber A e retornar B (alimentando assim a primeira funcao) e que no final nos retornara uma ultima funcao que ira receber A (entrada da segunda funcao) e retornara C (saida da primeira funcao). 11 12Com isso podemos deixar de forma sequecial a ordem de execucao das funcoes e facilitando assim a leitura do codigo. 13 14Com essas ideias, podemos levar em consideracao a seguinte implementacao: 15#+begin_src haskell 16somaDosQuadradosImpares = 17 sum (takeWhile (<1000) (filter odd (map (^2) [1..])))) 18#+end_src 19 20Podemos reescrever essa funcao utilizando o operador ~pipe~ (~$~): 21#+begin_src haskell 22somaDosQuadradosImpares' = sum 23 $ takeWhile (<1000) 24 $ filter odd 25 $ map (^2) [1..] 26#+end_src 27 28E por ultimo, a versao utilizando composicao de funcao: 29#+begin_src haskell 30somaDosQuadradosImpares'' = sum . takeWhile (<1000) . filter odd . map (^2) $ [1..] 31#+end_src 32 33Todas realizam a mesma operacao, o que ira facilitar seria a legibilidade da funcao para os demais desenvolvedores.