.
Немного школьной арифметики:
>ghci> 2 + 15 17
>ghci> 49 * 100
>4900
>ghci> 1892 – 1472 420
>ghci> 5 / 2
>2.5
Код говорит сам за себя. Также в одной строке мы можем использовать несколько операторов; при этом работает обычный порядок вычислений. Можно использовать и круглые скобки для облегчения читаемости кода или для изменения порядка вычислений:
>ghci> (50 * 100) – 4999 1
>ghci> 50 * 100 – 4999
>1
>ghci> 50 * (100 – 4999)
>–244950
Здорово, правда? Чувствую, вы со мной не согласны, но немного терпения! Небольшая опасность кроется в использовании отрицательных чисел. Если нам захочется использовать отрицательные числа, то всегда лучше заключить их в скобки. Попытка выполнения >5 * –3
приведёт к ошибке, зато >5 * (–3)
сработает как надо.
Булева алгебра в Haskell столь же проста. Как и во многих других языках программирования, в Haskell имеется два логических значения >True
и >False
, для конъюнкции используется операция >&&
(логическое «И»), для дизъюнкции – операция >||
(логическое «ИЛИ»), для отрицания – операция >not
.
>ghci> True && False False
>ghci> True && True True
>ghci> False || True True
>ghci> not False
>True
>ghci> not (True&&True)
>False
Можно проверить два значения на равенство и неравенство с помощью операций >==
и >/=
, например:
>ghci> 5 == 5
>True
>ghci> 1 == 0
>False
>ghci> 5 /= 5
>False
>ghci> 5 /= 4
>True
>ghci> "привет" == "привет"
>True
А что насчёт >5 + лама
или >5 == True
? Если мы попробуем выполнить первый фрагмент, то получим большое и страшное сообщение об ошибке[1]!
>No instance for (Num [Char])
>arising from a use of `+' at :1:0–9
>Possible fix: add an instance declaration for (Num [Char]) In the expression: 5 + "лама"
>In the definition of `it': it = 5 + "лама"
Та-ак! GHCi говорит нам, что >лама
не является числом, и непонятно, как это прибавить к 5. Даже если вместо >лама
подставить >четыре
или >4
, Haskell всё равно не будет считать это числом! Операция >+
ожидает, что аргументы слева и справа будут числовыми. Если же мы попытаемся посчитать >True == 5
, GHCi опять скажет нам, что типы не совпадают.
Несмотря на то что операция >+
производится только в отношении элементов, воспринимаемых как число, операция сравнения (==), напротив, применима к любой паре элементов, которые можно сравнить. Фокус заключается в том, что они должны быть одного типа. Вы не сможете сравнивать яблоки и апельсины. В подробностях мы это обсудим чуть позже.
ПРИМЕЧАНИЕ. Запись >5 + 4.0
вполне допустима, потому что >5
может вести себя как целое число или как число с плавающей точкой. >4.0
не может выступать в роли целого числа, поэтому именно число