52700.fb2
лись создавать библиотеки и документировать их.
18.4 Упражнения
Вспомните один из примеров и превратите его в библиотеку. Например, напишите библиотеку для нату-
ральных чисел Пеано.
274 | Глава 18: Средства разработки
Глава 19
Ориентируемся по карте
Рассмотрим задачу поиска маршрута на карте. У нас есть карта метро и нам нужно проложить маршрут
от одной станции к другой. Карта метро~– это граф, узлы обозначают станции, а рёбра соединяют соседние
станции. Предположим, что мы знаем расстояния между всеми станциями и нам надо найти кратчайший
путь от станции площадь Баха до станции Таинственный лес (рис. 19.1).
Космодром
Запад
Таинственный
лес
Призрак
Инева
ул.Булычёва
Троллев мост
Тилль
Сириус
Звезда
Север
Лао
Юг
Де
пл.Баха
Крест
пл.Шекспира
Дно болота
Родник
Восток
Рис. 19.1: Схема метрополитена
Давайте переведём этот рисунок на Haskell. Сначала опишем имена линий и станций:
module Metro where
data Station = St Way Name
deriving (Show, Eq)
data Way = Blue | Black | Green | Red | Orange
deriving (Show, Eq)
data Name = Kosmodrom | UlBylichova | Zvezda
| Zapad | Ineva | De | Krest | Rodnik | Vostok
| Yug | Sirius | Til | TrollevMost | Prizrak | TainstvenniyLes
| DnoBolota | PlBakha | Lao | Sever
| PlShekspira
deriving (Show, Eq)
Предположим, что нам известны координаты каждой из станций. По ним мы можем вычислять расстояние
между станциями по прямой:
| 275
data Point = Point