52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 15

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 15

на то, что это не процесс вычисления значения. Мы всего лишь объявляем новое имя для комбинации слов.

Теперь мы имеем целых четыре слова! Тем не менее, ушли мы не далеко, и два новых слова, в сущности,

не делают язык выразительнее. Такие синонимы называют константами. Это значит, что одним словом мы

будем обозначать некоторую комбинацию других слов. В данном случае комбинации очень простые.

Но наши синонимы могут определять одни слова через другие. Синонимы могут принимать параметры.

Параметры пишутся через пробел между новым именем и знаком равно:

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