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

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

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

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

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

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

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

на тему:

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

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

Ихсанова Э. А.

Проверил: Усманова А. Р.

Содержание

Содержание 2

1 задание 5

а) в списке есть гласные буквы 5

б) в строке нет цифр 5

2 задание 6

3 задание 6

б) преобразует числовой список в список, в котором четные элементы сложены со своими индексами ([1,2,3,4]->[2+1,4+3]->[3,7]) 6

4 задание 7

5 задание 8

6 задание 9

7 задание 9

Выводы 10

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

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

а) в строке есть гласные буквы, б) в строке нет цифр

  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 задание

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

а) в строке есть гласные буквы, б) в строке нет цифр

а) в списке есть гласные буквы

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

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

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

б) в строке нет цифр

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

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

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

2 задание

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

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

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

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

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

. Функция преобразует список кортежей двух чисел в список их сумм.

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

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

3 задание

а ) удаляет из списка все элементы, равные последнему;

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

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

б) преобразует числовой список в список, в котором четные элементы сложены со своими индексами ([1,2,3,4]->[2+1,4+3]->[3,7])

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

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

в) удаляет из строки все элементы до первой цифры и после последней.

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

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

4 задание

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

[ (‘a’, ‘c’), (‘c’, ‘a’), (‘b’, ‘b’), (‘a’, ’b’), (‘a’, ‘d’)]

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

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

5 задание

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

Множество

Свойство

Пример

R

ассоциативности

foo [logBase,/,+] 4 5 1

-> [False,False,True]

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

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

6 задание

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

П о НОК элементов

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

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

7 задание

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

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

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

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

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

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

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

Возвращает список вторых элементов кортежей из списка, на которых истинны все предикаты.

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

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

Выводы

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

Уфа – 2020