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

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

data [a] where

[]

:: [a]

(:)

:: a -> [a] -> [a]

Конструктор пустого списка [] является константой, а конструктор объединения элемента со списком

(:), является функцией. Когда я говорил, что типы определяют примитивы и методы составления из прими-

тивов, я имел ввиду, что некоторые конструкторы по сути являются константами, а другие функциями.

Эти “методы” определяют базовые значения типа, все другие значения будут комбинациями базовых.

При этом сумма типов, определяет число методов “классе” типа, то есть число базовых значений, а произ-

ведение типов в каждой альтернативе определяет имя метода (именем конструктора) и состав аргументов

(перечислением подтипов).

3.2 Структура констант

Мы уже знаем, что значения могут быть функциями и константами. Объявляя константу, мы даём имя-

синоним некоторой комбинации базовых конструкторов. В функции мы говорим как по одним значениям

получить другие. В этом и следующем разделе мы посмотрим на то, как типы определяют структуру констант

и функций.

Давайте присмотримся к константам:

Succ (Succ Zero)

Neg (Add One (Mul Six Ten))

Not (Follows A (And A B))

Cons 1 (Cons 2 (Cons 3 (Cons 4 Nil)))

Заменим все функциональные конструкторы на букву f (от слова function), а все примитивные конструк-

торы на букву c (от слова constant).

f (f c)

f (f c (f c c))

f (f c (f c c))

f c (f c (f c (f c c)))

Те кто знаком с теорией графов, возможно уже узнали в этой записи строчную запись дерева. Все зна-

чения в Haskell являются деревьями. Узел дерева содержит составной конструктор, а лист дерева содержит

примитивный конструктор. Далее будет небольшой подраздел посвящённый терминологии теории графов,

которая нам понадобится, будет много картинок, если вам это известно, то вы можете спокойно его пропу-

стить.

Структура констант | 41

Несколько слов о теории графов

Если вы не знакомы с теорией графов, то сейчас как раз самое время с ней познакомится, хотя бы на

уровне основных терминов. Теория графов изучает дискретные объекты в терминах зависимостей между

объектами или связей. При этом объекты и связи можно изобразить графически.

Граф состоит из узлов и рёбер, которые соединяют узлы. Приведём пример графа:

8

7

c

f

6

a

b

d

e

5

1