27 valores diferentes de Bool a Bool en Haskell
logic (1)
¿Podría alguien explicar por qué hay 27
Bool->Bool
diferentes de Bool->Bool
, de los cuales 11
pueden definirse en Haskell?
Hay tres valores de tipo Bool
: True
, False
y final (expresiones para las que la evaluación no finaliza o expresiones para las que la evaluación se convierte en errores).
Entonces, hay un número exponencial de funciones de A
a B
Más exactamente |B| ^ |A|
|B| ^ |A|
.
Por lo tanto, hay 3^3 = 27
funciones de tipo Bool -> Bool
.
Ahora, para la segunda parte de la pregunta: la función que comienza desde abajo puede ser solo 2: la que devuelve True
constantemente y la que devuelve False
constantemente. Luego debe agregar el número de funciones de {True, False}
a {True, False, bottom}
que es 3^2
. Entonces, en total tendrás 9+2=11
funciones.
Edición : Aquí están las 11 funciones posibles:
B
es inferior, T
es True
, F
es False
. La última fila representa las funciones const True
y const False
, mientras que las tres primeras filas representan funciones que prueban el valor del argumento. Es por eso que las primeras tres filas asignan B
a B
: probar el valor de bottom no puede resultar en nada más que en bottom.
Espero que esté más claro ahora.