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

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

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

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

ОТЧЕТ по лабораторной работе №3

по дисциплине:

«Функциональное программирование»

на тему:

«Функции высших порядков.»

Выполнил: бакалавр гр. ПРО-223

Алексеева А.В.

Проверил: Фридлянд Александр Михайлович

Содержание

Содержание 2

1 задание 5

а) 5

б) 6

2 задание 7

3 задание a) 8

3 задание б) 8

3 задание в) 8

4 задание 9

5 задание 10

6 задание 10

7 задание 11

Выводы 12

1 Цель работы (Вариант 3)

  1. Используя функции а) any и б) all, проверьте условия в интерпретаторе. Запишите функции в файле, решающие те же задачи, используя частичное применение функции.

а) в списке есть четные числа б) в списке нет чисел, превышающих 10

  1. Запишите функцию, решающую задачу

а) обычную рекурсивную функцию;

б) функцию с использованием функции map;

в) функцию с использованием функции map и лямбда-фнкциии.

Приветствуется частичное применение функций в пунктах б) и/или в).

а) функция удаляет из строки все цифры;

б) функция возвращает максимальный из индексов элементов числового списка, не превышающих 8;

в) считая, что в числовом списке все числа различны, получить кортеж двух списков – в первый входят элементы до минимального, во второй – после максимального элемента списка. ([5,6,2,1,4,3] -> ([5,6,2], [2,1,4,3]))

2 Теоретические основы

Функция any имеет два аргумента и проверяет, содержит ли второй аргумент – список хотя бы один элемент, удовлетворяющий первому аргументу. Первый аргумент этой функции сам является функцией, возвращающей логическое значение.

Функция all проверяет выполнение первого аргумента для всех элементов своего второго аргумента

Одной из важнейших функций высшего порядка является функция map, встречающаяся во всех функциональных языках и даже в декларативных, таких как C++, Ruby, Python и других. Эта функция применяет свой первый аргумент – функцию последовательно к каждому элементу второго аргумента – списка.

Функция filter оставляет во втором аргументе списке только элементы, удовлетворяющие первому аргументу – предикату

Функция zip, вообще говоря, не являющаяся функцией высшего порядка, позволяет из двух списков создать список кортежей, объединяющих попарно элементы списков

Функция $ понижает приоритет функции

Функция (.) означает композицию функций в математическом смысле

3 Результат выполнения работы

1 задание

  1. Используя функции а) any и б) all, проверьте условия в интерпретаторе. Запишите функции в файле, решающие те же задачи, используя частичное применение функции.

а) в списке есть четные числа б) в списке нет чисел, превышающих 10

а)

в списке есть четные числа

Рисунок 1 В интерпретаторе

Рисунок 2 Исходный код функции

Рисунок 3 Результат

б)

в списке нет чисел, превышающих 10

Рисунок 4 В интерпретаторе

Рисунок 5 Исходный код

Рисунок 6 Результат

2 задание

Запишите функцию, решающую задачу

а) обычную рекурсивную функцию;

б) функцию с использованием функции map;

в) функцию с использованием функции map и лямбда-фнкциии.

Приветствуется частичное применение функций в пунктах б) и/или в).

Функция возвращает список, в котором фиксируется сравнение каждого элемента с заданным числом (указание: можно использовать функцию compare)

Рисунок 7 Исходный код (foo2a – для пункта задания а), (foo2b – для пункта задания б), foo2c – для пункта задания в).)

Рисунок 8 Результат

3 задание a)

функция удаляет из строки все цифры;

Рисунок 9 Исходный код

Рисунок 10 Результат

3 задание б)

функция возвращает максимальный из индексов элементов числового списка, не превышающих 8

Рисунок 11 Исходный код

Рисунок 12 Результат

3 задание в)

считая, что в числовом списке все числа различны, получить кортеж двух списков – в первый входят элементы до минимального, во второй – после максимального элемента списка. ([5,6,2,1,4,3] -> ([5,6,2], [2,1,4,3]))

Рисунок 13 Результат

4 задание

Для заданного отображения Р найти

Рисунок 14 Исходный код программы

Рисунок 15 Результат нахождения обратного отображения

Рисунок 16 Результат нахождения композиции

Рисунок 17 Результат нахождения композиции

Рисунок 18 Результат нахождения декартова произведения

5 задание

Проверить указанное свойство операций над указанным множеством. Входные аргументы функции должны быть списком функций или списком кортежей функций и содержать необходимое число входных аргументов из множества (см. в таблице пример).

Свойство дистрибутивности слева

Рисунок 19 Исходный код

Рисунок 20 Результат

6 задание

Отсортировать список кортежей двух целочисленных элементов по указанному признаку.

По первому элементу

Рисунок 21 Исходный код

Рисунок 22 Результат

7 задание

Дан список предикатов двух переменных:

Р1(х,у)=”x+y – четное число”,

P2 (х,у)=”x>y”,

P3 (х,у)=”x и y имеют одинаковые остатки от деления на 4”,

P4 (х,у)=”x+2y<8”,

P5 (х,у)=”max{x,y} – нечетное число”,

и список кортежей [(x,y)]. Написать функцию, имеющую аргументами эти два списка и решающую задачу.

Получить список кортежей, на котором истинны все предикаты.

Рисунок 23 Исходный код

Рисунок 24 Результат работы программы

Выводы

Выполнила задания лабораторной, соответствующие моему варианту.

Уфа – 2020