Изучай Haskell во имя добра! (Липовача) - страница 7

.

Немного школьной арифметики:

>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 не может выступать в роли целого числа, поэтому именно число