52700.fb2
*Logic> xor (not True) (False)
False
it :: Bool
*Logic> ifThenElse (or true false) True False
True
it :: Bool
Логические значения | 27
Разумеется в Haskell уже определены логические операции, здесь мы просто тренировались. Они называ-
ются not, (&& ), ||. Операция xor это то же самое, что и (/=). Для Bool определён экземпляр класса Eq. Также
в Haskell есть конструкция ветвления она пишется так:
x = if cond then t else e
Слова if, then и else – ключевые. cond имеет тип Bool, а t и e одинаковый тип.
В коде программы обычно пишут так:
x = if a > 3
then ”Hello”
else (if a < 0
then ”Hello”
else ”Bye”)
Отступы обязательны.
Давайте загрузим в интерпретатор модуль Prelude и наберём те же выражения стандартными функция-
ми:
*Logic> :m Prelude
Prelude> not (True && False)
True
it :: Bool
Prelude> (True && True) || (False || False)
True
it :: Bool
Prelude> not True /= False
False
it :: Bool
Prelude> if (True || False) then True else False
True
it :: Bool
Бинарные операции с символьными именами пишутся в инфиксной форме, то есть между аргументами
как в a && b или a + b. Значение с буквенным именем также можно писать в инфиксной форме, для этого
оно заключается в апострофы, например a ‘and‘ b или a ‘plus‘ b. Апострофы обычно находятся на одной
кнопке с буквой “ё”. Также символьные функции можно применять в префиксной форме, заключив их в
скобки, например (&& ) a b и (+) a b. Попробуем в интерпретаторе:
Prelude> True && False
False
it :: Integer
Prelude> (&& ) True False
False
it :: Bool
Prelude> let and a b = a && b
and :: Bool -> Bool -> Bool
Prelude> and True False
False