21
опирается на богатую историю создания функциональных языков
программирования, начатую первым таким языком – Лиспом, описанным в
1960-м году МакКарти. Сильное влияние на язык оказали следующие
работы в области функционального программирования: система
комбинаторного программирования FP Бэкуса, появившаяся в конце 1970-
х годов, язык ML ("Meta-language", созданный в Эдинбургском
университете примерно в то же время
) и созданный в 1985-1986 под
сильным влиянием ML язык Miranda. Названными языками и системами
мир функционального программирования далеко не исчерпывается. В
частности, названные языки и системы носят, скорее, «академический»
или учебный характер, однако есть и, по крайней мере, один коммерческий
язык функционального программирования – Euler.
Мы изучим элементы языка Haskell для того,
чтобы иметь в своем
распоряжении инструмент функционального программирования и чтобы
понять, какие средства и возможности есть в функциональном
программировании. Конечно, для изучения языка необходимо самому
писать программы на этом языке, отлаживать и исполнять их. В
приложении 1 приведены рекомендации по установке и использованию
системы программирования на языке Haskell – WinHugs. Это
некоммерческая система программирования, информацию
о которой и о
многих других системах программирования на языке Haskell можно найти
на сайте http://www.haskell.org/
.
В процессе дальнейшего изложения мы будем приводить примеры и
задачи для самостоятельного решения, которые можно программировать и
отлаживать с использованием этой или других систем функционального
программирования на языке Haskell.
Haskell - строго типизированный язык. Это означает, что любая
конструкция в языке, задающая некоторый объект, имеет определенный
тип, который можно «вычислить» еще
до начала выполнения программы,
то есть статически. Таким же свойством обладают большинство
современных языков программирования, такие как Паскаль, Java, Си++ и
многие другие. Труднее привести пример не строго типизированного
языка (если, конечно, не считать некоторых отступлений от строгой
типизации в упомянутых выше языках, сделанных для удобства
практического программирования, таких, например, как
тип Pointer в
языке Паскаль). Пожалуй, самым известным из языков, изначально не
имеющих строгой типизации, является первый язык функционального
программирования Лисп.
Основу системы типов языка Haskell составляют элементарные
встроенные типы данных: целые, представленные двумя подтипами с
идентификаторами Integer и Int, вещественные, также с двумя
подтипами Float и Double, логические, имеющие идентификатор
типа
Bool и символьные (Char). Заметим сразу же, что все идентификаторы в