this repo has no description
1* Condicionais
2E como toda linguagem de programacao, tambem temos condicionais para criar logicas nos nossos codigos.
3
4*lembrete que a identacao de nosso codigo eh de extrema importancia*
5
6#+begin_src haskell
7:{
8signum :: (Num a, Ord a) => a -> a
9signum n = if n < 0
10 then -1
11 else if n == 0
12 then 0
13 else 1
14:}
15
16signum 10
17#+end_src
18
19#+RESULTS:
20: 1
21
22#+begin_src haskell
23:{
24raizes2GrauV4 :: (Ord a, Floating a) => a -> a -> a -> (a, a)
25raizes2GrauV4 a b c =
26 if delta < 0
27 then error "Delta negativo"
28 else (x1, x2)
29 where
30 x1 = ((-b) + sqDelta) / (2 * a)
31 x2 = ((-b) - sqDelta) / (2 * a)
32 sqDelta = sqrt delta
33 delta = b^(2 :: Int) - 4 * a * c
34:}
35
36raizes2GrauV4 2 3 5
37#+end_src
38
39#+RESULTS:
40#+begin_example
41,*** Exception: Delta negativo
42CallStack (from HasCallStack):
43 error, called at <interactive>:55:8 in interactive:Ghci19
44#+end_example
45
46** Guards
47Tambem para facilitar a leitura e diminuir a verbosidade, podemos utilizar o *Guards* nas nossas funcoes para declarar a mesma encadeacao de condicionais feitas.
48#+begin_src haskell
49:{
50signumV2 :: (Num a, Ord a) => a -> a
51signumV2 n
52 | n < 0 = -1
53 | n == 0 = 0
54 | otherwise = 1
55:}
56
57signumV2 (-20)
58#+end_src
59
60#+RESULTS:
61: -1
62
63** Pattern Matching
64Ou podemos tambem criar pattern matching para deixar as nossas declaracoes de funcoes mais explicitas e sem sintaxe de logica no nosso codigo, apenas declarando algumas verdades para serem executadas e avalidas mais tarde.
65
66#+begin_src haskell
67:{
68soma 0 y = y
69soma x 0 = x
70soma x y = x + y
71:}
72#+end_src
73
74Ou podemos ignorar completamente as variavel nas nossas declaracoes de variavel nos pattern matching utilizando o ~_~ como parametro
75#+begin_src haskell
76:{
77mult 0 _ = 0
78mult _ 0 = 0
79mult 1 y = y
80mult x 1 = x
81mult x y = x * y
82:}
83#+end_src
84