Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MakeevGA-Haskell-a4-shortcode_2014_05_31.doc
Скачиваний:
15
Добавлен:
19.01.2023
Размер:
1.79 Mб
Скачать

Простейший инструментарий Установка WinHugs и начало работы

Для обучения языку вполне достаточно будет простого интерпретатора языка Haskell, который называется Hugs. Последнюю версию лучше всего брать здесь:

http://cvs.haskell.org/Hugs/pages/downloading.htm

На момент написания этого текста, последняя версия, доступная по приведенной выше ссылке, называется WinHugs-Sep2006.exe. Установка типична и проблем не вызывает.

Вообще говоря, интерпретатор Hugs не поддерживается разработчиками уже несколько лет (по крайней мере, не выходят обновления). Достоинством его является маленький размер и простота использования, поэтому для обучения я рекомендую пользоваться именно им.

Тем же, кто хочет с самого начала работать со "взрослыми" пакетами разработки на языке Haskell, прямая дорога к The Haskell Platform с его GHC (Glasgow Haskell Compiler) и набором стандартных библиотек и утилит (в том числе и очень похожей на Hugs маленькой интерпретируемой средой WinGHCi). Взять все необходимое можно здесь:

http://www.haskell.org/platform/

Интересующихся более полным обзором имеющегося инструментария для разработки на языке Haskell, отсылаю к отдельной книге [3].

Работа с интерпретатором WinHugs в интерактивном режиме

Примечание: текст этого и нескольких следующих разделов в своей большей части представляет собой перевод частей документа "The Hugs 98 User Manual".

При запуске программа отображает главное окно программы с информацией о версии и приглашением к работе:

Type :? for help

Hugs>

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

Вообще говоря, Hugs – это что-то вроде очень сложного калькулятора. Интерпретатор просто вычисляет значение введенного пользователем выражения и возвращает результат этого вычисления:

Hugs> (2+3)*8

40

Hugs > sum [1..10]

55

Hugs >

Надпись Hugs> в начале первой, третьей и пятой строк – это приглашение к работе, отображаемое интерпретатором. Оно показывает, что система готова к вводу пользователем выражений. В первом случае пользователь ввел выражение (2+3)*8, которое было вычислено и результат 40 возвращен пользователю. В ответ на второе приглашение системы пользователь ввел выражение sum [1..10]. Запись [1..10] означает список целых чисел от 1 до 10, а sum – это функция из стандартных модулей, которая возвращает сумму чисел в заданном списке. Таким образом, интерпретатор возвращает:

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 → 55

На самом деле, чтобы посчитать эту сумму, можно было прямо так и набрать в строке ввода:

Hugs > 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

55

Hugs >

Однако в отличие от калькуляторов, Hugs не ограничивается работой с числами. Выражения могут включать значения многих типов: числа, логические значения, символы, строки, списки, функции и другие типы, в том числе и определенные пользователем. Например:

Hugs > (not True) || False

False

Hugs > reverse "Hugs is cool"

"looc si sguH"

Hugs > filter even [1..10]

[2, 4, 6, 8, 10]

Hugs > take 10 fibs where fibs = 0:1:zipWith (+) fibs (tail fibs)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Hugs >

Однако в командной строке интерпретатора можно только вычислять значения выражений, но нельзя вводить новые определения: их нужно помещать в файлы и загружать (как это сделать, будет объяснено совсем скоро).

Определение fibs в последнем примере создается только при вычислении выражения и не сохраняется для последующего использования. К тому же выражение не может содержать переносов строк (хотя и может занимать больше, чем одну строку на экране).