Может ли кто-нибудь объяснить, почему существуют 27
разные значения Bool->Bool
, из которых 11
может быть определено в Haskell?
27 различных значений Bool to Bool в Haskell
Ответ 1
Существует три значения типа Bool
: True
, False
и bottom (выражения, для которых оценка не заканчивается, или выражения, для которых оценка превращается в ошибки).
Тогда существует экспоненциальное число функций от A
до B
. Более точно |B| ^ |A|
.
Таким образом, существуют 3^3 = 27
функции типа Bool -> Bool
.
Теперь, для второй части вопроса: функция, начинающаяся снизу, может быть только 2: постоянная, возвращающая True
и постоянная возвращающая False
. Затем вам нужно добавить число функций от {True, False}
до {True, False, bottom}
, которое равно 3^2
. Итак, у вас будут функции 9+2=11
.
Изменить. Вот 11 возможных функций:
B
- нижний, T
- True
, F
- False
. Последняя строка представляет функции const True
и const False
, тогда как первые три строки представляют функции, проверяющие значение аргумента. Вот почему первые три строки отображают от B
до B
: проверка значения дна не может привести к чему-то еще, кроме нижнего.
Надеюсь, теперь это станет понятным.