Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет_Лаба1_ФП_Ихсанова

.doc
Скачиваний:
0
Добавлен:
07.04.2025
Размер:
464.38 Кб
Скачать

Уфимский университет науки и технологий

ОТЧЕТ по лабораторной работе №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