- •Тема 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
- •Выполнение работы
- •Задания
- •Требование нетривиальности в данном случае означает, что встречающиеся в выражениях списки должны содержать больше одного элемента. Контрольные вопросы
Выполнение работы
По поручению преподавателя студент выполняет одно из представленных заданий. Все полученные результаты записать в журнал лабораторных работ (такой журнал можно вести в виде файла в личном каталоге студента в главном каталоге для проведения лабораторных работ по функциональному программированию).
Задания
1. Приведите пример нетривиальных выражений, принадлежащих следующему типу:
Требование нетривиальности в данном случае означает, что встречающиеся в выражениях списки должны содержать больше одного элемента. Контрольные вопросы
Для чего используется файл Prelude.hs?
Сколько классов определено в файле Prelude.hs и для чего они используются?
Зачем определять несколько экземпляров для класса? Как используются разные экземпляры?
Для чего используются «минимальные» определения методов классов? Каким образом можно минимизировать код программ?
Для чего используются функции каррирования и декаррирования, определённые в Prelude.hs?
Сколько функций работы со списками определено в файле Prelude.hs?
Для чего используются функции zip* из файла Prelude.hs?
В чем отличие команд интерпретатора от выражений языка Haskell?
Основные типы языка Haskell.
Допустимые имена переменных и функций.