Haskell/Soluções: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 231:
 
{{Exercício|1=
A versão de casamento de padrões de <code>pts</code> e esta última versão mista são ligeiramente diferentes. Você consegue ver a diferença? Conseguiria reescrever a versão mista para que as duas retornem os mesmos resultados sempre? Dica: compare a definição matemática e a implementação em Haskell e preste atenção a condição implícita da definição matemática.
}}
 
A condição implícita de <math>\text{pts}(x)</math> é que <math>x</math> deve ser maior que ou igual a 1 sempre: não há posição 0 ou posições negativas.
A diferença acontece quando o argumento é menor que <code>1</code>. Na versão de casamento de padrões, se o argumento for <code>-1</code>, o padrão casado será o último (<code>_</code>) e o resultado seria <code>0</code>. Na versão mista, entraríamos no padrão com guardas, a primeira guarda seria verdadeira, e o resultado final seria <code>7 - (-1)</code> que é <code>8</code>, o que é um resultado errado.
 
A diferença acontece quando o argumento de <code>pts</code> é menor que <code>1</code>. Na versão decom casamento de padrões, se o argumento for <code>-1</code>, por exemplo, o padrão casado será o último (<code>_</code>) e o resultado seria <code>0</code>. Na versão mista, entraríamos no padrão com guardas, a primeira guarda seria verdadeira (pois <code>(-1) <= 6</code> é verdadeiro), e o resultado final seria <code>7 - (-1)</code>, que é <code>8</code>, o que é um resultado errado.
 
Uma possível solução seria escrever: