es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

coincidencia de patrones de literales negativos en Haskell

Estaba tratando de entender por qué los patrones n + k están prohibidos en Haskell. Una famosa publicación en StackOverflow da un ejemplo de una función de la siguiente manera:

f 0 = 0
f (n + 5) = 5

Haskell muestra un error al emparejar f 1, f 2, f 3, f 4.
No puedo entender por qué (-1) no puede coincidir con n. En primer lugar, pensé que los enteros solo contienen literales no negativos (0, 1, ..), pero la definición de Haskell del tipo Int incluye literales negativos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que los patrones n + k están prohibidos en Haskell se debe a su potencial ambigüedad e imprevisibilidad. En la función de ejemplo f 0 = 0 y f (n + 5) = 5, puede parecer al principio que los valores de n se pueden emparejar con un desplazamiento de 5. Sin embargo, esto crea ambigüedad al intentar emparejar patrones que se superponen, como f 1, f 2, f 3 y f 4.

    Además, los valores negativos realmente pueden coincidir con n en Haskell, ya que el tipo Int incluye literales negativos. Sin embargo, la prohibición de los patrones n + k no está relacionada con los valores negativos, sino más bien con la ambigüedad que surge al intentar emparejar patrones que se superponen entre sí.

    Para evitar estos problemas, Haskell utiliza guardias (por ejemplo, f x | x < 5 = 0; f x = 5) y otros mecanismos de coincidencia de patrones para lograr una funcionalidad similar sin la ambigüedad potencial de los patrones n + k.

Comments are closed.