Questão 1: Escreva uma função recursiva em Haskell que receba uma lista de números inteiros e retorne o menor número presente na lista. Atenção: você não pode utilizar a função minimum.
Passo 1
O enunciado pede uma função recursiva em Haskell que receba uma lista de inteiros e retorne o menor elemento, sem usar a função definida minimum. O conteúdo principal envolvido é recursão em listas e pattern matching.
Passo 2
Para resolver recursivamente, precisamos definir dois casos: um caso base, que termina a recursão, e um caso recursivo, que reduz o problema a uma lista menor.
Passo 3
No caso base, quando a lista tem exatamente um elemento, esse elemento é, por definição, o menor da lista. Então, se o padrão for uma lista de um elemento só, retornamos esse elemento.
Passo 4
No caso recursivo, dividimos a lista em cabeça (x) e cauda (xs). Chamamos a função em xs para obter o menor de xs, e depois comparamos esse valor com x. Se x for menor, retornamos x; caso contrário, retornamos o mínimo obtido da cauda.
Passo 5
Agora é só juntar a assinatura de tipo, o caso base e o caso recursivo usando guards e where para definir o mínimo da cauda. Isso garante que a função percorra a lista inteira e compare corretamente cada elemento.
Resposta
menor :: [Int] -> Int
menor [x] = x
menor (x:xs)
| x < m = x
| otherwise = m
where m = menor xs
menor [x] = x
menor (x:xs)
| x < m = x
| otherwise = m
where m = menor xs