Pergunta

Eu sou bastante novo em Haskell, mas obtém a maior parte do básico. No entanto, há uma coisa que eu simplesmente não consigo descobrir. Considere meu exemplo abaixo:

example :: Int -> Int
example (n+1) = .....

A parte (n+1) deste exemplo de alguma forma impede a entrada de números negativos, mas não consigo entender como. Por exemplo .. se a entrada fosse (-5), eu esperaria que N fosse apenas (-6), pois (-6 + 1) é (-5). A saída ao testar é a seguinte:

Erro do programa: Falha no padrão do padrão: Exemplo (-5)

Alguém pode me explicar por que isso não aceita números negativos?

Foi útil?

Solução

É assim que padrões n+k estão definidos para trabalhar:

Combinando um padrão N+K (onde n é uma variável e K é um número inteiro positivo) contra um valor V é bem -sucedido se x> = k, resultando na ligação de n a x - k, e falha de outra forma.

O ponto dos padrões N+K é executar a indução, portanto, você precisa concluir o exemplo com um caso base (K-1 ou 0 neste caso) e decidir se um parâmetro menor do que isso seria um erro ou não. Assim:

example (n+1) = ...
example 0 = ...

A semântica que você está pedindo essencialmente seria bastante inútil e redundante - você poderia apenas dizer

example n = let n' = n-1 in ...

para alcançar o mesmo efeito. O objetivo de um padrão é falhar às vezes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top