this repo has no description
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: