52700.fb2
Теперь мы имеем целых четыре слова! Тем не менее, ушли мы не далеко, и два новых слова, в сущности,
не делают язык выразительнее. Такие синонимы называют константами. Это значит, что одним словом мы
будем обозначать некоторую комбинацию других слов. В данном случае комбинации очень простые.
Но наши синонимы могут определять одни слова через другие. Синонимы могут принимать параметры.
Параметры пишутся через пробел между новым именем и знаком равно:
not :: Bool -> Bool
not True
= False
not False = True
Мы определили новое имя not с типом Bool -> Bool. Оно определяется двумя уравнениями (clause). Слева
от знака равно левая часть уравнения, а справа – правая. В первом уравнении мы говорим, что сочетание (not
True) означает False, а сочетание (not False) означает True. Опять же, мы ничего не вычисляем, мы даём
новые имена нашим константам True и False. Только в этом случае имена составные.
Если вычислителю нужно узнать, что кроется за составным именем not False он последовательно про-
анализирует уравнения сверху вниз, до тех пор, пока левая часть уравнения не совпадёт со значением not
False. Сначала мы сверим с первым:
not True
== not False
-- нет, пошли дальше
not False
== not False
-- эврика, вернём правую часть
=> True
Определим ещё два составных имени
and :: Bool -> Bool -> Bool
and False
_
= False
and True
x
= x
or
:: Bool -> Bool -> Bool
or True
_ = True
or False
x = x
Эти синонимы определяют логические операции “и” и “или”. Здесь несколько новых конструкций, но вы
не пугайтесь, они не так трудны для понимания. Начнём с _:
and False
_
= False
16 | Глава 1: Основы
Здесь cимвол _ означает, что в этом уравнении, если первый параметр равен False, то второй нам уже не
важен, мы знаем ответ. Так, если в логическом “и” один из аргументов равен False, то всё выражение равно
False. Так же и в случае с or.
Теперь другая новая конструкция:
and True
x