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

Отчет_Лаба1_ФП_Алексеева

.doc
Скачиваний:
4
Добавлен:
19.01.2023
Размер:
3.71 Mб
Скачать

Уфимский государственный авиационный технический университет

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