Примерна тема за първо контролно по ФП
Вариант А
Задача 1. Да се напише функция (meetTwice? f g a b), която проверява дали в целочисления интервал [a; b] съществуват две различни цели числа x и y такива, че f(x) = g(x) и f(y) = g(y).
Пример:(meetTwice? (lambda(x)x) (lambda(x) (- x)) -3 1) → #f
Пример:(meetTwice? (lambda(x)x) sqrt 0 5) → #t
Задача 2. Да се напише функция (maxDuplicate ll), която по списък от списъци от цели числа ll намира най-голямото от тези числа, които се повтарят в рамките на списъка, в който се срещат. Ако в нито един списък няма повтарящи се числа, функцията да връща #f.
Пример: (maxDuplicate ‘((1 2 3 2) (-4 -4) (5))) → 2
Пример: (maxDuplicate ‘((1 2 3) (-4 -5 -6) ())) → #f
Задача 3. Да се напише функция (checkMatrix? m k) която проверява дали на всеки ред в дадена матрица m от цели числа има поне по едно число, кратно на k.
Пример:(checkMatrix? ‘((1 2 6) (3 8 9) (10 12 11)) 3) → #t
Пример:(checkMatrix? ‘((1 2 4) (3 8 9) (10 12 11)) 3) → #f
Задача 4. Да се напише функция (longestDescending l), която намира низходящо сортиран подсписък на списъка от числа l с максимална дължина. Ако съществуват няколко такива подсписъка, функцията да върне първия отляво надясно.
Упътване: Реализирайте помощна функция, която намира най-дългия низходящо сортиран префикс на даден списък.
Пример: (longestDescending ‘(5 3 8 6 4 2 6 7 1)) → (8 6 4 2)
Пример: (longestDescending ‘(1 2 3 4 5 6)) → (1)
Вариант Б
Задача 1. Да се напише функция (mixed? f g a b), която проверява дали в целочисления интервал [a; b] съществуват цели числа x и y такива, че f(x) < g(x), но f(y) > g(y).
Пример:(mixed? (lambda (x) x) (lambda (x) (- x)) -3 1) → #t
Пример:(mixed? sqrt exp 1 5) → #f
Задача 2. Да се напише функция (maxUnique ll), която по списък от списъци от цели числа намира най-голямото от тези от тях, които са уникални в рамките на списъка, в който се срещат. Ако в никой списък няма уникални числа, функцията да връща #f.
Пример: (maxUnique ((1 2 3 2) (5 5) (0))) → 3
Пример: (maxUnique ((1 2 1 2) (5 5) ())) → #f
Задача 3. Да се напише функция (checkMatrix? m k), която проверява дали e вярно, че няма ред в дадената матрица m, която да се състои само от делители на k.
Пример: (checkMatrix ‘((1 2 6) (3 8 9) (6 11 12)) 12) → #f
Пример: (checkMatrix ‘((1 2 7) (3 8 9) (6 11 12)) 12) → #t
Задача 4. Да се напише функция (longestAscending l), която намира възходящо сортиран подсписък на списъка от числа l с максимална дължина. Ако съществуват няколко такива подсписъка, функцията да върне първия отдясно наляво.
Упътване: Реализирайте помощна функция, която намира най-дългия възходящо сортиран префикс на даден списък.
Пример: (longestAscending ‘(5 3 8 6 4 2 6 7 1)) → (2 6 7)
Пример: (longestAscending ‘(6 5 4 3 2 1)) → (1)