this repo has no description
at main 1.5 kB view raw
1* Assinatura de funcao 2As assinaturas de funcoes servem para declarar a tipagem que nossa funcao ira usar, retornar e os parametros que utilizaremos na funcao. 3 4#+begin_src haskell 5:{ 6raizes2Grau :: Floating a => a -> a -> a -> (a, a) 7raizes2Grau a b c = (((-b) + sqrt(b^(2 :: Int) - 4 * a * c))/ (2 * a), 8 ((-b) - sqrt(b^(2 :: Int) - 4 * a * c))/ (2 * a)) 9:} 10 11raizes2Grau 2 3 5 12#+end_src 13 14#+RESULTS: 15: (NaN,NaN) 16 17** Clausula "where" 18Para facilitar a leitura e dividir as funcionalidades e facilitar a leitura, podemos declarar trechos do codigo para variaveis dentro da funcao a fim de facilitar a leitura e poder reaproveitar codigo dentro de nossas funcoes. 19 20#+begin_src haskell 21:{ 22raizes2GrauV2 :: Floating a => a -> a -> a -> (a, a) 23raizes2GrauV2 a b c = (x1, x2) 24 where 25 x1 = ((-b) + sqDelta) / (2 * a) 26 x2 = ((-b) - sqDelta) / (2 * a) 27 sqDelta = sqrt delta 28 delta = b^2 - 4 * a * c 29:} 30 31raizes2GrauV2 2 3 (-5) 32#+end_src 33 34#+RESULTS: 35: (1.0,-2.5) 36 37** Clausula "let in" 38Ela eh bem semelhando a clausula ~where~, porem o escopo das definicoes declaradas soh sao acessadas dentro do escopo do ~in~. 39#+begin_src haskell 40:{ 41cylinder :: (RealFloat a) => a -> a -> a 42cylinder r h = 43 let sideArea = 2 * pi * r * h 44 topArea = pi * r ^2 45 in sideArea + 2 * topArea 46:} 47 48cylinder 2 5 49#+end_src 50 51#+RESULTS: 52: Prelude> 87.96459430051421 53 54Tambem eh possivel declarar funcoes dentro do escopo do ~let~ 55#+begin_src haskell 56[let square x = x * x in (square 5, square 3, square 2)] 57#+end_src 58 59#+RESULTS: