Отчет_Лаба1_ФП_Алексеева
.docУфимский государственный авиационный технический университет
ОТЧЕТ по лабораторной работе №1
по дисциплине:
«Функциональное программирование»
на тему:
«Знакомство с интерпретатором Hugs. Выполнение математических операций в интерпретаторе. Простейшие генераторы списков. Логические функции, функции сравнения, функции работы с перечислимыми типами данных. Простейшие списочные и кортежные функции»
Выполнил: бакалавр гр. ПРО-223
Алексеева А.В.
Проверил: Фридлянд Александр Михайлович
Содержание
Содержание 2
1 задание 4
2 задание 4
3 задание 4
4 задание 6
5 задание 6
Выводы 7
1 Цель работы (Вариант 3)
1. Вычислить числовое выражение
2. Вычислить логическое выражение: Верно только одно из двух утверждений: 1) остаток от деления 84 на 9 не больше, чем наибольший общий делитель 34 и 68 2) второй элемент кортежа (“a”,”b”) входит в строку “abcdef”, которую перевернули и удалили после этого 2 первых элемента.
3. Получить списки с помощью генератора списков
а) 1,8, 94;
б) центрированные семиугольные числа
в) Расписание на день должно состоять из 4 пар. Найти все комбинации расписаний, если общее число предметов 9 (предметы придумать самостоятельно) и их число.
4. Функцию myexpr(определив самостоятельно тип и необходимое число аргументов), позволяющую вычислить выражение из задания 1. Убедитесь в равенстве ответов. Продемонстрируйте работу функции при каких-нибудь 3 наборах аргументов, отличных от начальных (в задании 1).
После создания файла сохраните его и вернитесь в интерпретатор. Загрузить файл можно а) с помощью кнопки «Открыть файл» б) набрав в интерпретаторе команду :l <имя файла>. После успешного (нет сообщений об ошибках) открытия файла набирайте в интерпретаторе имя функции и необходимые параметры (см. пример выполнения лабораторной работы ниже).
5. а) Проверить, содержится ли минимальный элемент первого списка во втором списке.
б) Дан числовой список и кортеж двух чисел. Присоединить к списку в качестве первого и последнего элементов первый и второй элементы кортежа соответственно
2 Теоретические основы
Основные типы в языке:
Char — символьный тип
Bool — True или False
Int — целочисленное. Его размер может быть 32 бита или 64 на соответствующей архитектуре.
Integer — «бесконечное» целое
Double — дробное (с плавающей точкой)
Базовые операции над списками
Оператор добавления элемента в голову списка
>let s = ‘H’ : “ello”
Оператор конкатенации двух списков
s ++ “world”
Операторы (:) и (++) имеют одинаковую
ассоциативность и приоритет.
3 Результат выполнения работы
1 задание
Рисунок 1 Результат работы в интерпретаторе WinHugs
Hugs> (8.12 + (2 ** (8.12 + 3.04))) / (sin(8.12 + (1/3.04)) ^^ 2) (введенное выражение)
3348.085921959(результат)
2 задание
Рисунок 2 Результат работы в интерпретаторе WinHugs
Hugs> (rem 84 9 <= gcd 34 68) /= ((snd ('a', 'b')) `elem` drop 2 (reverse ['a', 'b', 'c', 'd', 'e', 'f'])) (введенное выражение)
False(результат)
3 задание
А)
Hugs> [1,(1+8)..94]
[1,9,17,25,33,41,49,57,65,73,81,89]
b)
Рисунок 3 Показано получение 10 чисел
Hugs> take 10 [(7*n^2 - 7*n + 2)/2|n<-[1..]]
[1.0,8.0,22.0,43.0,71.0,106.0,148.0,197.0,253.0,316.0] (результат)
c)
Рисунок 4 сверху рисунка – результат запроса всех комбинаций расписания, снизу – количество комбинаций
List> length [(x, y, w, z) |x<-["one","two","three","four","five","six","seven","eight","nine"], y<-["one","two","three","four","five","six","seven","eight","nine"], w <-["one","two","three","four","five","six","seven","eight","nine"], z<-["one","two","three","four","five","six","seven","eight","nine"]]
6561
List>
4 задание
Рисунок 5 Исходный код
Рисунок 6 Результат(с параметрами из 1 задания и с другими значениями)
5 задание
1)
Рисунок 7 Результат работы с функцией
Рисунок 8 Функция в документе с расширением .hs
foo1 l1 l2 = minimum l1 `elem` l2 (содержимое документа)
2)
Рисунок 9 результат работы с разными видами списков
foo2 (a,b)l3 = a:l3 ++ [b]
Выводы
Познакомилась с интерпретатором Hugs и выполнила задания лабораторной, соответствующие моему варианту.
Уфа – 2020