Manejo de booleanos en haskell

De Uqbar wiki

El Tipo Bool

Los booleanos son datos que representan la condición de verdad o falsedad.

Recordemos que even es una función que recibe un número, y devuelve un booleano. (True si el número es par)

Hagamos estas consultas en la consola (El simbolito > al inicio de la línea indica que se está haciendo una consulta):

> even 6 
True
> not True
False
> not False
True

Aquí se ve que not es una función recibe un Bool (y que devuelve el booleano opuesto).

Hay otras funciones que devuelven booleanos:

> 5 < 1
True
> "mama" == "papa"
False

Entonces, si queremos que una función devuelva un booleano, basta con devolver el mismo resultado que obtuvimos. Por ejemplo,

--"la golondrina pepita está empachada si su energía es mayor que 100"
estaEmpachada energia = energia > 100

Conjunción y Disjunción Lógica

> True || False
True
> True && False
False

Para saber si el 6 es par y divisible por 3:

> even 6 && (esDivisible 6 3)
True

Errores Comunes

“true” vs true vs True

En Haskell,

> not true
``Not in scope: `true'``
> not "true"
`` Couldn't match expected type `Bool' ``
`` with actual type `[Char]' ``
> not True
False

Problemas con Booleanos y Guardas

Mal Uso de Booleanos (algo == True)

Una variante de los problemas con Guardas es lo siguiente:

desaprueba nota = estaAprobada nota == False
pierdePromocion nota = estaAprobada nota == True && nota < 8

Ese código está mal. ¿Por qué? Porque estaAprobada ya devuelve un Booleano. De la misma manera la función menor también devuelve un Booleano. Entonces, en el caso de pierdePromocion, está demás la comparación por True. Y en el caso del desaprobada, si lo que necesito es el opuesto del booleano, entonces debo usar la función not:

desaprueba nota = not (estaAprobada nota)
pierdePromocion nota = estaAprobada nota && nota < 8

Ese código es el correcto. Comprobamos así:

> estaAprobada 7 == False
True
> not (estaAprobada 7)
True
> estaAprobada 7 == True
True
> estaAprobada 7
True

Latest update on July 17, 2017 by GitHub