2010-02-08 14 views

Respuesta

10

Las protecciones Haskell se pueden ver como una función matemática definida por partes sobre la entrada.

foo x | x < 0 = bar 
     | x < 5 = baz 
     | x < 20 = quux 
     | otherwise = quaffle 

se escribiría por un matemático como:

foo(x) = { bar, if x < 0 
      baz, if x >= 0 && x < 5 
      quux, if x >= 5 && x < 20 
      quaffle, if x >= 20 

Cada uno de los guardias en una función Haskell lleva implícita la negación de todos los guardias que lo preceden, ya que se trataron uno tras otro.

Haskell elige escribir la guarda a la izquierda del signo igual para facilitar el seguimiento del flujo de control. Si elige leer el | como 'tal que' entonces se vuelve bastante intuitivo.

+0

Entonces, ¿es como ejecutar una función en una condición que ... y dependiendo de la condición, ejecutará solo esa función donde la condición es verdadera, y todas las condiciones previas habrán sido falsas? ¿derecho? –

+0

"quaffle" ... esa es una nueva para mí: D –

+1

Leí el "|" como "cuando": 'foo x, cuando x <0, = barra ... cuando x <5, = baz' y así sucesivamente. Sin embargo, no se debe confundir con 'cuándo '. – Nefrubyr

8

Una ecuación guardada es una ecuación (una afirmación sobre una igualdad) que implica lo que se llama distinción de caso . Un ejemplo es:

fac :: Integer -> Integer 
fac n | n > 0  = n * fac (n - 1) 
     | otherwise = 1 

Esta es una definición de la factorial function. Los matemáticos escribir,

Latex

0! = 1, por definición. Para todos los valores n mayor que , n! se puede definir en términos de (n - 1)!. ¡Este no es el caso para 0!. Esa es la razón por la cual se deben distinguir dos casos. Y eso es lo que hace una ecuación cautelosa.

Cuestiones relacionadas