
Отчет_Лаба1_ФП_Ихсанова
.docУфимский университет науки и технологий
ОТЧЕТ по лабораторной работе №1
по дисциплине:
«Функциональное программирование»
на тему:
«Знакомство с интерпретатором Hugs. Выполнение математических операций в интерпретаторе. Простейшие генераторы списков. Логические функции, функции сравнения, функции работы с перечислимыми типами данных. Простейшие списочные и кортежные функции»
Выполнил: студент гр. ПРО-432Б
Ихсанова Э. А.
Проверил: Усманова А. Р.
Содержание
Содержание 2
1 задание 4
4
2 задание 4
3 задание 4
4 задание 5
5 задание 6
Вывод 6
1 Цель работы (Вариант 9)
1.
2. Верно, что если 1) символ, имеющий номер на 2 больший, чем символ ‘g’ входит в строку “haskell”, то 2) наименьшее общее кратное первого и последнего элементов списка [15,32,24,48] нечетно.
3. а) 8,4,107;
б) центрированные шестиугольные числа;
в) В аккорд входит 3 различные ноты, найти все аккорды , состоящие из 7 различных нот и их число.
4. Функцию myexpr(определив самостоятельно тип и необходимое число аргументов), позволяющую вычислить выражение из задания 1. Убедитесь в равенстве ответов. Продемонстрируйте работу функции при каких-нибудь 3 наборах аргументов, отличных от начальных (в задании 1).
После создания файла сохраните его и вернитесь в интерпретатор. Загрузить файл можно а) с помощью кнопки «Открыть файл» б) набрав в интерпретаторе команду :l <имя файла>. После успешного (нет сообщений об ошибках) открытия файла набирайте в интерпретаторе имя функции и необходимые параметры (см. пример выполнения лабораторной работы ниже).
5. а) В заданной строке производит циклический сдвиг на n символов влево.
(«abcdefgh» 3 - > «defghabc» )
б) По заданному числовому списку получить кортеж двух булевских значений – четности минимального элемента списка и максимального.
2 Теоретические основы
Основные типы в языке:
Char — символьный тип
Bool — True или False
Int — целочисленное. Его размер может быть 32 бита или 64 на соответствующей архитектуре.
Integer — «бесконечное» целое
Double — дробное (с плавающей точкой)
Базовые операции над списками
Оператор добавления элемента в голову списка
>let s = ‘H’ : “ello”
Оператор конкатенации двух списков
s ++ “world”
Операторы (:) и (++) имеют одинаковую
ассоциативность и приоритет.
3 Результат выполнения работы
1 задание
Рисунок 1
Prelude> (cosh 5.89 + sqrt (1-0.37))/(5.89^^2 + (cos 0.37/sin 0.37)) (введенное выражение)
4.86976521493323 (результат)
2 задание
Верно, что если 1) символ, имеющий номер на 2 больший, чем символ ‘g’ входит в строку “haskell”, то 2) наименьшее общее кратное первого и последнего элементов списка [15,32,24,48] нечетно.
Р
исунок
2 Результат работы в интерпретаторе
WinHugs
Prelude> (('i' `elem` "haskell") <= odd (lcm (head [15,32,24,48]) (last [15,32,2
4,48])))
True
3 задание
а) 8,4,107;
P
relude>
[8,(8+4)..107]
[8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104]
б)
центрированные шестиугольные числа;
Рисунок 3 Показано получение 20 чисел
Prelude> [n*(n-1)|n<-[1..20]]
[0,2,6,12,20,30,42,56,72,90,110,132,156,182,210,240,272,306,342,380] (результат)
в
)
В аккорд входит 3 различные ноты, найти
все аккорды, состоящие из 7 различных
нот и их число.
Рисунок 4 сверху рисунка – результат запроса всех комбинаций, снизу – количество комбинаций
[(x, y, w) | x<-["do","re","mi","fa","sol","la","si"], y<-["do","re","mi","fa","sol","la","si"], w <-["do","re","mi","fa","sol","la","si"],x/=y, x/=w, y/=x , y/=w, w/=x, w/=y]
List> length [(x, y, w) | x<-["do","re","mi","fa","sol","la","si"], y<-["do","re","mi","fa","sol","la","si"], w <-["do","re","mi","fa","sol","la","si"]]
343
4 задание
Функцию myexpr(определив самостоятельно тип и необходимое число аргументов), позволяющую вычислить выражение из задания 1. Убедитесь в равенстве ответов. Продемонстрируйте работу функции при каких-нибудь 3 наборах аргументов, отличных от начальных (в задании 1).
После создания файла сохраните его и вернитесь в интерпретатор. Загрузить файл можно а) с помощью кнопки «Открыть файл» б) набрав в интерпретаторе команду :l <имя файла>. После успешного (нет сообщений об ошибках) открытия файла набирайте в интерпретаторе имя функции и необходимые параметры (см. пример выполнения лабораторной работы ниже).
Рисунок
5
Рисунок 6 Результат (с параметрами из 1 задания и с другими значениями)
5 задание
а) В заданной строке производит циклический сдвиг на n символов влево.
(«abcdefgh» 3 - > «defghabc» )
Рисунок 7 Результат работы
б) По заданному числовому списку получить кортеж двух булевских значений – четности минимального элемента списка и максимального.
Р
исунок
8 результат работы с разными видами
списков
Вывод
Познакомилась с интерпретатором Hugs и выполнила задания лабораторной, соответствующие моему варианту.
Уфа – 2024