| Semester 4 |
|---|
| Homework 1 |
| Homework 2 |
| Homework 3 |
-
Факториал. Solution
Напишите на F# программу, считающую факториал. Подумайте, что делать, если ей передали отрицательное число. -
Фибоначчи. Solution
Напишите программу, считающую (за линейное время) число Фибоначчи с заданным номером. Подумайте, что делать, если номер некорректный. -
Обращение списка. Solution
Реализуйте функцию обращения списка, работающую за линейное время. Например, на списке[1; 2; 3]она должна возвращать[3; 2; 1]. -
Степени двойки. Solution
Реализовать функцию, которая принимает на входnиmи возвращает список из элементов
[2^n; 2^(n + 1); ...; 2^(n + m)]. -
Поиск в списке. Solution
Реализовать функцию, которая выдает первую позицию вхождения заданного числа в список.
-
map, filter, fold. Solution
Реализовать три варианта функции, подсчитывающей количество четных чисел в списке (с использованием стандартных функций map, filter, fold). Использование рекурсии не допускается, зато нужен FsCheck для проверки функций на эквивалентность. -
map для деревьев. Solution
Реализовать функцию, применяющую функцию к каждому элементу двоичного дерева и возвращающую новое двоичное дерево, каждый элемент которого — результат применения функции к соответствующему элементу исходного дерева (map для деревьев). -
Дерево разбора. Solution
Посчитать значение дерева разбора арифметического выражения, заданного через вложенные discriminated union-ы. -
Простые числа. Solution
Реализовать функцию, генерирующую бесконечную последовательность простых чисел.
-
Бета-редукция. Solution
Выполнить бета-редукцию λ-терма ((λa.(λb.b b) (λb.b b)) b) ((λc.(c b)) (λa.a)). -
S K K. Solution
Докажите, что S K K = I. -
Лямбда-интерпретатор. Solution
Реализовать интерпретатор лямбда-выражений, выполняющий бета-редукцию по нормальной стратегии. Лямбда-выражения задаются через размеченные объединения. Должна поддерживаться альфа-конверсия для избежания захвата свободных переменных.