
- •Тема 1. Функциональная парадигма в программировании
- •1.1. Общие сведения о парадигмах программирования
- •1.2. История функционального программирования
- •1.3. Основы функционального программирования
- •1.3.2. Строгая типизация
- •1.3.3. Модульность
- •1.3.4. Функции — это значения и объекты вычисления
- •1.3.5. Чистота (отсутствие побочных эффектов)
- •1.3.6. Отложенные (ленивые) вычисления, виды вычислений (вызовы по значению и по необходимости)
- •1.3.7. Строгие функции
- •Список литературы
- •Лабораторная работа №1
- •Начало работы с Hugs
- •Установка программы
- •Команды Hugs
- •Просмотр классов
- •Просмотр зарегистрированных имён объектов
- •Просмотр конструкторов типов
- •Просмотр иерархии классов
- •Создание скрипта
- •Некоторые важные понятия
- •Упражнение.
- •Изучение файла Prelude.Hs
- •Выполнение работы
- •Задания
- •Требование нетривиальности в данном случае означает, что встречающиеся в выражениях списки должны содержать больше одного элемента. Контрольные вопросы
Просмотр иерархии классов
Просматривая иерархию классов (Browse->Hierarchy), программист может увидеть отношения наследования между созданными классами. Необходимо отметить, что алгоритм прорисовки классов и отношений вHUGS98 несколько неадекватен, поэтому для более полного понимания от программиста требуется либо чутьё, либо способность быстро разбросать все классы по диалоговому окну, создав планарный граф.
Это диалоговое окно можно вызвать не только из главного меню приложения, но и из диалогового окна для просмотра списка классов.
На рисунке показана иерархия классов из файла Prelude.hs. Как видно из рисунка в этом файле определены классы эквивалентности (все, которые наследуют свойства классаEq) и классы-монады (Monad,Functor,ReadиBounded).
Создание скрипта
В главном каталоге для проведения лабораторных работ по функциональному программированию создать подкаталог, название которого должно соответствовать номеру группы (конечно, если такой подкаталог ещё не создан). В этом каталоге создать ещё один подкаталог, название которого должно соответствовать фамилии студента. При помощи стандартного текстового редактора (NotepadдляWindows) создать новый файл с расширениемHS.
Некоторые важные понятия
Последовательность интерактивных взаимодействий пользователя и компьютера называется сессией. Набор объявлений и определений функций, размещенный в отдельном файле, называетсяскриптом.Hugsне позволяет определять новые функции в интерактивном режиме, а только разрешает вводить выражения, использующие уже определенные функции. Каждая программа (скрипт) на языкеHaskell, называемая также модулем, размещается в отдельном файле, имеющем расширениеhs.
Упражнение.
Создайте с помощью любого текстового редактора файл, содержащий следующие две строки:
square :: Integer -> Integer
square x = x*x
Сохраните файл под именем myprog.hs. Далее откройте интерпретатор и проделайте следующие действия:File->ModuleManager…->Add-> найдите директорию с вашим файлом и нажмитеOk(или нажмите на панели инструментов на значок «открытие документа» и выберите свой файл).
Далее наберите
square 12
у вас получится примерно так:
Пояснения.Наш первый скрипт содержитобъявление(первая строка) иопределение(вторая строка) функцииsquare. Объявление функции указывает откуда и куда действует функция, а определение задает способ преобразования аргумента. Символ :: читается как «имеет тип». Для ознакомления интерпретатораHugsс содержимым файла используется команда :load(и ее сокращенная форма :l).
Изучение файла Prelude.Hs
Цель: изучить структуру и реализованные возможности файла начальной загрузки HUGS 98 — Prelude.hs; узнать, какие классы, простые структуры данных и функции для их обработки уже реализованы разработчиками HUGS 98. Приобрести навыки работы с интерпретатором Haskell. Получить представление об оснонвых типах языка Haskell. Научиться определять простейшие функции.
Предварительная подготовка
В системном каталоге ИС HUGS98 найти файл предопределенийPrelude.hs(например, C:\Program Files\WinHugs\packages\hugsbase\Hugs). Скопировать этот файл в личный каталог для проведения лабораторных работ по функциональному программированию и дать этому файлу новое название.