this repo has no description
at main 1.8 kB view raw
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